美文网首页
列表生成式

列表生成式

作者: 萍水间人 | 来源:发表于2018-11-22 21:29 被阅读5次

    一个例子:
    计算列表中的每个元素的长度,然后将长度添加到元素内容后面,生成一个新的列表

    list_text = ['a','bb','ccc','a1']
    list_new = [i + str(len(i)) for i in list_text]
    print(list_new);
    

    这是一个列表生成式的典型应用,本来对于列表中的每一个元素,如果用循环来实现这个功能,将会额外增加好多行代码

    我们可以这样实现一个平方数表
    squares = list(map(lambda x:x**2, range(10)))
    也可以这样实现
    squares = [x**2 for x in range(10)]
    显然后一种方式更容易理解

    列表生成式也可以写的很复杂
    [(x,y) for x in [1,2,3] for y in [3,1,4] if x != y]

    实际上,列表生成式这个概念在python钟已经被泛化了用刚刚的方法,不仅可以生成列表,还可以生成dict和set类型的数据结构

    s = "hello world"
    comp = {x for x in s}
    

    上面用列表生成式的方法生成了一个集合类型,集合可以理解成只存储key,没有value,所以set是不会有重复值(因为dict类型的key不允许用重复的)

    如果你想要一个key映射多个value,可以考虑value采用list类型

    严格来说,字典生成式的语法是这样的

    {key:value for(key, value) in iterable}
    注意,这里有一个zip函数可以把可迭代对象作为参数,将对相对象对应的元素打包成一个个元组,然后返回又这些元组组成的列表

    s = "hello world"
    dict_comp = {k:v for (k,v) in zip(range(11), s)}
    
    如果对zip函数不是很熟悉的话

    可以看看下面的代码输出

    s = "hello world"
    for k, v in zip(range(9), s):
        print(k, v)
    

    列表生成式的一些例子

    指定目录下查找指定后缀的所有文件

    import os
    def list_files_with_ext(path, ext):
        return [file for f in os.listdir(path) if f.endswith(ext)]
    

    相关文章

      网友评论

          本文标题:列表生成式

          本文链接:https://www.haomeiwen.com/subject/mmprqqtx.html