python解析式

小杰哥001發表於2018-08-16

一、列表解析式

列表解析(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
複製程式碼

相關文章