一、列表解析式
列表解析(list comprehension)提供了一種優雅的生成列表的方法,能用一行程式碼代替十幾行程式碼,而且不損失任何可讀性。而且比起使用map和lambda表示式,效能還快很多,如將整數列表轉換為bool列表
lst = [123,453,-546,23,-646,1,245,4363,112,9,0,2,-12]
# 一般實現方式
tmp = []
for x in lst:
if x > 0:
tmp.append(1)
else:
tmp.append(0)
# map實現
def func(x):
if x > 0:
return 1
else:
return 0
tmp = list(map(func, lst))
# 列表解析式實現
tmp = [1 if x > 0 else 0 for x in lst ]
複製程式碼
提取出字串裡的所有單詞的首字母
text = 'My name is TangHao'
str = [word[0] for word in text.split()]
str
複製程式碼
獲取一個全為’tang’的列表
lst = ['tang' for i in range(10)]
lst
複製程式碼
獲取兩個列表對應元素的乘積
list1 = [1,2,3]
list2 = [5,6,7]
lst = [x*y for x,y in zip(list1,list2)]
lst
複製程式碼
解開巢狀列表使其變為普通列表
lst = [[1,2,3],[2,5],[26,7],[3,7,8,9]]
result = [x for i in lst for x in i]
result
複製程式碼
求所有可能的組合
二、字典解析式
與列表解析式類似,字典解析式的第一部分是一個鍵值對
dic = {'tang':20, 'wang':18, 'meng':15}
dic1 = {k:v for k,v in dic.items() if v > 18}
dic1
複製程式碼
三、集合解析式
集合解析式和列表解析式很類似,就是需要把列表解析式的中括號換為大括號
lst = [1,2,3,4,5,6,6,6,7,8]
st = {x for x in lst if x > 3}
st
複製程式碼