Python之列表解析和生成器表示式

2021-09-11 05:05:53 字數 1331 閱讀 9615

列表解析(列表推導式)是非常有用,簡單靈活的工具,可以動態的建立列表。

[ expr for iter_var in iterable ]
iterable是乙個可迭代物件  expr是元素的處理結果;

列表解析就是在一行**中寫了乙個for迴圈;結果返回的是乙個列表

例1:我要建立乙個[0,1,4,9,16,25]列表

1)傳統函式式程式設計:

map(lambda(x:x**2),range(6))
2)列表解析:(效率更高!)

[x**2 for x in range(6)]
可以看到新的語句中只呼叫了乙個函式range(),原來的語句用了三個函式map(),lambda(), range()  

[ expr for iter_var in iterable if cond_expr]
過濾或捕獲滿足條件的表示式 cond_expr 的序列成員

seq = [11,22,32,33,15,8,9,7,9,16,15]

l = [x for x in seq if x%2==1]

print(l)

生成器表示式和列表解析的差別僅在  ()

genetor = ( expr for iter_var in iterable if cond_expr)
with open('測試','r',encoding='utf-8') as f:

n = len([word for line in f for word in line.split()])#單詞的個數

f.seek(0)#將檔案指標移動到開始

s = sum([len(word) for line in f for word in line.strip()])#非空字串的個數

print(n,s)

with open('測試','r',encoding='utf-8') as f:

q = max((len(line.strip())for line in f))

print(q)

rows = ['a','b','c','d']

cols = [1,2,3,4]

ret = ((x,y) for x in rows for y in cols)#ret是乙個生成器,要用for迴圈遍歷輸出

for i in ret:

print(i,end=',')

Python之道 列表解析和生成器

python版本 2.7.4 主機環境 gentoo with linux kernel 3.4.36 列表解析完成的功能可以使用for迴圈替代或者map呼叫來替代。對於剛開始使用python的初學者,通常使用簡單的for迴圈,邏輯清晰,這樣會容易理解,特別是在巢狀的時候。效能對比 map呼叫比等效...

python 列表解析式和生成器

可以根據已有列表,高效建立新列表的方式。列表解析是python迭代機制的一種應用,它常用於實現建立新的列表,返回的是乙個列表,因此用在中。列表解析式因編譯器進行優化,提高了效率,減少出錯,增加可讀性 示例1 生成乙個列表,元素0 9,對每乙個元素自增1後求平方返回新列表 常規寫法 new for i...

列表解析與生成器

1 語法 返回值 for 元素 in 可迭代物件 if 條件 使用中括號,內部是for迴圈,if條件語句可選 返回乙個新列表 高階 expr for i in iterable for j in iterable2 等價於 ret for i initerable1 for j in iterabl...