Python(15)--推導
阿新 • • 發佈:2018-11-28
列表推導:
類似for迴圈,是從其他列表建立列表的方式
s = [i for i in range(6)] print(s) # [0, 1, 2, 3, 4, 5]
可以加判斷條件
s = [i for i in range(6) if i%2 == 0] print(s) # [0, 2, 4]
可以有更多的for
s = [(x, y) for x in range(3) for y in range(3)] print(s) # [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
將首字元相同的男孩與女孩名字配對
girls =['alice','bernice','clarice'] boys =['chris', 'arnold', 'bob'] li = [b + "+" + g for b in boys for g in girls if b[0] == g[0]] print(li)
上面的效率不高,因為需要檢查每一種配對,優化後:
girls =['alice','bernice','clarice'] boys =['chris', 'arnold', 'bob'] d = {} for girl in girls: d.setdefault(girl[0], []).append(girl) print([b + "+" + g for b in boys for g in d[b[0]]]) # 建立字典d,每項的鍵都是一個字母,值為這個字母開頭的女孩名組成的列表,列表推導遍歷男孩,找到名字首字母和當前男孩相同的女孩
字典推導:
字典推導中,for前面有兩個用冒號分隔的表示式,分別表示鍵和值;列表只有一個
d = {i: "{} +1 is {}".format(i, i+1) for i in range(6)} print(d) # {0: '0 +1 is 1', 1: '1 +1 is 2', 2: '2 +1 is 3', 3: '3 +1 is 4', 4: '4 +1 is 5', 5: '5 +1 is 6'}