python 之 推導式
阿新 • • 發佈:2019-01-23
推導式 : 英文 comprehension
支援推導式的有列表list 字典dict 集合set 注意元組沒有 推導式,如果你那樣去寫,他會變成一個generator生成器物件
推導式會讓程式碼更加簡潔,易懂,更加pythonic
列表:
[ expression for ..... if ..... ] #生成了一個列表物件
其中:expression 是加入到列表中的元素的表示式 , 後面的for if 則是對這個表示式進行重複和篩選的語句
#!/usr/bin/env python3 #coding:utf-8 li1 = [1 for i in range(5)] print(li1) #[1, 1, 1, 1, 1] li2 = [i for i in range(1,11) if i%2==0] print(li2) #[2, 4, 6, 8, 10] li3 = [char.upper() for char in 'hello'] print(li3) #['H', 'E', 'L', 'L', 'O'] li4 = [i*i for i in range(10)] print(li4) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] li5 = [(m,n) for m in [1,2,3] for n in "abc"] print(li5) #[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]
集合的推導式和列表一樣,只不過集合或過濾掉重複 的元素
字典:
#!/usr/bin/env python3
#coding:utf-8
s = 'hello'
#字串中每個字元出現的次數 char : times
d1 = {char:s.count(char) for char in s }
print(d1)
#這個字典在生成的時候發生了鍵的覆蓋:'hello' 中'l' 出現了2次
#改進:
d2 = {char:s.count(char) for char in set(s)}
print(d2)