列表解析(列表推導式)是非常有用,簡單靈活的工具,可以動態的建立列表。
[ 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...