almost 9 years ago
List comprehension(列表示推導)是一種可以讓程式碼更簡潔,增加可讀性與執行效率的方法。
可以將很多行的for迴圈縮在短短一行之內,很方便!
1.
假如我們現在有一個list--l1
l1=[2,5,3,8,4,9]
若我們想要建立一個新表單l2,是把l1中的每一個元素加上二,最先想到的寫法是:
l2=[]
for l in l1:
l2.append(l+2)
知道怎麼用List comprehension的話,我們可以用列表示:
l2=[l+2 for l in l1]
這樣看起來就簡潔多了!
2.
我們也可以把if條件判斷也寫進去。
例如,想要把l1中可以被3整除的數抓出來,存到l2
l2=[]
for l in l1:
if l%3==0:
l2.append(l)
用List comprehension來簡化,可以變成:
l2=[l for l in l1 if l%3==0]
3.
超過一個以上的list也可以使用List comprehension,例如,兩個list
x=[1,2,3]
y=[3,5,6]
如果我們要產生一個新的list--z是以每個x和每個y的元素的值為座標。
z=[]
for xi in x:
for yi in y:
z.append((xi,yi))
這可以簡化成:
z=[(xi,yi) for xi in x for yi in y]
4.
其實List comprehension不只可以用在list,也可以用在dictionary上。
有一個list--z1如下。
z1=[(1,3),(2,5),(3,6)]
例如我們想把z1改成dictionary--z2,像這樣:
z2={}
for zi,zj in z1:
z2.update({zi:zj})
可以簡化成:
z2={zi:zj for zi,zj in z1}
結語:
總之List comprehension可以大幅減少程式碼的行數。
其實,還有其他種方法,也可以讓程式碼更簡潔,例如map,filter和reduce,下一回我會提到。
想要看看更多有關於List comprehension可以到:
http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions