• python学习之路(13)


    列表生成式


    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

    举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11)

    >>> range(1,11)
    range(1, 11

    但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

    >>> range(1,11)
    range(1, 11)
    >>> list=[]
    >>> for x in range(1,11):
        list.append(x*x)
    
        
    >>> list
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

    >>> list=[x*x for x in range(1,11) if x%2==0]
    >>> list
    [4, 16, 36, 64, 100]

    还可以使用两层循环,可以生成全排列:

    >>> list=[m+n for m in'dasd' for n in'sad']
    >>> list
    ['ds', 'da', 'dd', 'as', 'aa', 'ad', 'ss', 'sa', 'sd', 'ds', 'da', 'dd']

    三层和三层以上的循环就很少用到了。

    运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

    >>> import os
    >>> list=[d for d in os.listdir('.')]
    >>> list
    ['10.py', '360安全卫士.lnk', '7dLauncher.exe', '8月新答题', 'chenzaifen', 'cmd.exe.lnk', 'desktop.ini', 'Dota 2.url', 'Google Chrome.lnk', 'mimikatz_trunk.rar', 'phpStudy.lnk', 'pop3', 'Python电子邮件', 'Python电子邮件.zip', 'WeGame.lnk', 'wire', '~$PowerShell.exe 执行 Empire 的几种姿势.doc', '助教工作', '协议分析', '学习之路', '密码学重修', '小工具', '新建文件夹', '新建文件夹 (2)', '新建文件夹 (3)', '极速PDF编辑器.lnk', '爱奇艺.lnk', '百度网盘.lnk', '网络协议', '网络渗透', '逆向', '酷狗音乐.lnk']

    for循环其实可以同时使用两个甚至多个变量,比如dictiteritems()可以同时迭代key和value:

    >>> for k,v in d.items():
        print(k,'=',v)
    
        
    sdad = dsad
    adsa = sdaasda
    asdassad = asdas

    因此,列表生成式也可以使用两个变量来生成list:

    >>> d={'x':'1','y':'2','z':'3'}
    >>> list=[k+'='+v for k,v in d.items()]
    
    >>> list
    ['x=1', 'y=2', 'z=3']

    最后把一个list中所有的字符串变成小写:

    >>> list=['DSADA','DSADSA','SA']
    >>> list=[s.lower()for s in list]
    >>> list
    ['dsada', 'dsadsa', 'sa']

    运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。

    思考:如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:

    >>> L= ['Hello', 'World', 18, 'Apple', None]
    >>> [s.lower() for s in L]
    Traceback (most recent call last):
      File "<pyshell#106>", line 1, in <module>
        [s.lower() for s in L]
      File "<pyshell#106>", line 1, in <listcomp>
        [s.lower() for s in L]
    AttributeError: 'int' object has no attribute 'lower'

    使用内建的isinstance函数可以判断一个变量是不是字符串:

    >>> x='dasd'
    >>> y=123151
    >>> isinstance(x,str)
    True
    >>> isinstance(y,str)
    False
    
  • 相关阅读:
    【笔记】rocketMQ了解
    【笔记】正则表达式·记②贪婪匹配、非贪婪匹配、独占模式和量词
    source 1.5 中不支持 diamond 运算符(中文版idea)
    【笔记】Linux基础指令
    maven BUILD FAILURE
    SELECT...FROM 表 a,( SELECT...FROM...WHERE...) tc...的一些注意
    dbeaver导出结果集中乱码
    【笔记】正则表达式·记①元字符
    maven报错:501 HTTPS Required
    【笔记】正则表达式·记③分组与引用
  • 原文地址:https://www.cnblogs.com/-zhong/p/10864350.html
Copyright © 2020-2023  润新知