一个例子:
计算列表中的每个元素的长度,然后将长度添加到元素内容后面,生成一个新的列表
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)]
网友评论