• Python高级特性--切片+迭代+列表生成式


    在Python中,代码不是越多越好,而是越少越好。代码不是越复杂越好,而是越简单越好。

    1行代码能实现的功能,决不写5行代码。请始终牢记,代码越少,开发效率越高。

    切片

    #取list前三个数   
    list = ['A','B','C','D']             
    ans = []
    for i in range(0,3):
        ans.append(list[i])
    print(ans)
    print(list[0:3])                                 #L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
    #第一个索引是0,还可以省略
    print(list[:3])
    #可以从索引1开始,取出2个元素出来
    print(list[1:3])
    #Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片 
    #记住倒数第一个元素的索引是-1。
    print(list[-4:])                                  
    

    tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

    (1,2,3,4,5)[:3]   => (1, 2 ,3 )
    

    小结

    在很多编程语言中,针对字符串提供了很多各种截取函数(例如,substring),其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。

    #去除首尾之间的空格
    def trim(s):
    
        while  s[:1]==' ':
    
                s=s[1:]
    
        while s[-1:]==' ':
    
            s = s[:-1]
    
        return s;
    

    迭代

    如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)

    list = ['A','B','C','D']
    
    for i in list:
        print(i)
    

    Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。

    #因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。
    dic = {'A':1,'B':4,'C':3,'D':2,'H':1,'E':2,'O':2,'L':3}
    # 只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:
    for i in dic:
        print(i)
    '''
    A
    B
    C
    D
    H
    E
    O
    L
    '''
    #迭代dic的值
    #默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。
    #字符串也是可迭代对象 :迭代string  
    for i in 'ABC':
        print(i)
    

    Python内置的enumerate函数可以把一个list变成索引-元素对

    list = [1,2,3,4,5]
    for i,value in enumerate(list):
        print(i,value)
    '''
    0 1
    1 2
    2 3
    3 4
    4 5
    '''
    
    list = [(1, 1), (2, 4), (3, 9)]
    for i,value in list:
        print(i,value)
    '''
    1 1
    2 4
    3 9          这方法不适用于字典
    '''
    

    列表生成式

    b = range(1, 11)
    print(b)  # 结果 range(1, 11)
    print(type(b))
    print(list(b))    # 转list    
    #range(1, 11)
    #<class 'range'>
    #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    #生成[1x1, 2x2, 3x3, ..., 10x10]
    l = []                                      # 写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来
    for x  in range(1,11):
        l.append(x*x)
    print(l)
    #等同于
    l=[ x*x  for x in range(1,11)]         # for 后面还可以加 if  [x * x for x in range(1, 11) if x % 2 == 0]         不用“ :” 注意
    print(l)
    #还可以使用两层循环,可以生成全排列
    [m + n for m in 'ABC' for n in 'XYZ']
    #['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
    
    ### os 系统的库
    import os # 导入os模块,模块的概念后面讲到
    l = [d for d in os.listdir('.')]  # os.listdir可以列出文件和目录
    print(l)
    #  [d for d in os.listdir('.')] # os.listdir可以列出文件和目录
    

    for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value: 然后现在可以迭代字典了

    d = {'A':1,'B':2,'C':3,'D':4,'E':5}
    '''
    for x , value in d:  # 不适用于字典
        print(x,value)   # errors
    '''
    for x , value in d.items(): #适用于字典
        print(x,value)
    
    #也可生成列表
    d = {'A':1,'B':2,'C':3,'D':4,'E':5}
    l = [ x+'='+str(y) for x , y in d.items()] # 这里的连接需要同类型的 需要类型转换
    print(l)
    

    L = ['Hello', 'World', 18, 'Apple', None]
    l = [x.lower() for x in L if isinstance(x,str)]
    print(l)
    #['hello', 'world', 'apple']
    
  • 相关阅读:
    微服务全链路剖析
    记一次被挖矿经历
    centos权限总结
    Beizer。。。。。
    遇到的几个算法
    程序截图
    CFileViewer(文件浏览器)
    框架设计
    git常用代码
    右值引用
  • 原文地址:https://www.cnblogs.com/cznczai/p/11297422.html
Copyright © 2020-2023  润新知