1. 程式人生 > >python 鏈表表達式 map、filter易讀版

python 鏈表表達式 map、filter易讀版

ali required rake 創建鏈表 保留 guid lambda dbo hand

鏈表推導式
[x for x in x] 

鏈表推導式提供了一個創建鏈表的簡單途徑,無需使用 map(), filter() 以及 lambda。返回鏈表的定義通常要比創建這些鏈表更清晰。每一個鏈表推導式包括在一個for語句之後的表達式,零或多個for或if語句。返回值是由for或if子句之後的表達式得到的元素組成的鏈表。如果想要得到一個元組,必須要加上括號。
>>> freshfruit = [  banana,   loganberry , passion fruit  ]
>>> [weapon.strip() for weapon in
freshfruit] [banana, loganberry, passion fruit] >>> vec = [2, 4, 6] >>> [3*x for x in vec] [6, 12, 18] >>> [3*x for x in vec if x > 3] [12, 18] >>> [3*x for x in vec if x < 2] [] >>> [[x,x**2] for x in vec] [[2, 4], [4, 16], [6, 36]]
>>> [x, x**2 for x in vec] # error - parens required for tuples File "<stdin>", line 1, in ? [x, x**2 for x in vec] ^ SyntaxError: invalid syntax >>> [(x, x**2) for x in vec] [(2, 4), (4, 16), (6, 36)] >>> vec1 = [2, 4, 6] >>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2] [8, 6, -18, 16, 12, -36, 24, 18, -54] >>> [x+y for x in vec1 for y in vec2] [6, 5, -7, 8, 7, -5, 10, 9, -3] >>> [vec1[i]*vec2[i] for i in range(len(vec1))] [8, 12, -54]


為使鏈表推導式匹配for循環的行為,可以在推導之外保留循環變量:

>>> x = 100                     # this gets overwritten
>>> [x**3 for x in range(5)]
[0, 1, 8, 27, 64]
>>> x                           # the final value for range(5)


摘自
Python handbook
Guido van Rossum
Fred L. Drake, Jr., editor

python 鏈表表達式 map、filter易讀版