一個(gè)例子:
計(jì)算列表中的每個(gè)元素的長(zhǎng)度,然后將長(zhǎng)度添加到元素內(nèi)容后面,生成一個(gè)新的列表
list_text = ['a','bb','ccc','a1']
list_new = [i + str(len(i)) for i in list_text]
print(list_new);
這是一個(gè)列表生成式的典型應(yīng)用鲁僚,本來對(duì)于列表中的每一個(gè)元素,如果用循環(huán)來實(shí)現(xiàn)這個(gè)功能,將會(huì)額外增加好多行代碼
我們可以這樣實(shí)現(xiàn)一個(gè)平方數(shù)表
squares = list(map(lambda x:x**2, range(10)))
也可以這樣實(shí)現(xiàn)
squares = [x**2 for x in range(10)]
顯然后一種方式更容易理解
列表生成式也可以寫的很復(fù)雜
[(x,y) for x in [1,2,3] for y in [3,1,4] if x != y]
實(shí)際上冰沙,列表生成式這個(gè)概念在python鐘已經(jīng)被泛化了用剛剛的方法侨艾,不僅可以生成列表,還可以生成dict和set類型的數(shù)據(jù)結(jié)構(gòu)
s = "hello world"
comp = {x for x in s}
上面用列表生成式的方法生成了一個(gè)集合類型拓挥,集合可以理解成只存儲(chǔ)key唠梨,沒有value,所以set是不會(huì)有重復(fù)值(因?yàn)閐ict類型的key不允許用重復(fù)的)
如果你想要一個(gè)key映射多個(gè)value侥啤,可以考慮value采用list類型
嚴(yán)格來說当叭,字典生成式的語法是這樣的
{key:value for(key, value) in iterable}
注意,這里有一個(gè)zip函數(shù)可以把可迭代對(duì)象作為參數(shù)盖灸,將對(duì)相對(duì)象對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組蚁鳖,然后返回又這些元組組成的列表
s = "hello world"
dict_comp = {k:v for (k,v) in zip(range(11), s)}
如果對(duì)zip函數(shù)不是很熟悉的話
可以看看下面的代碼輸出
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)]