1. 程式人生 > >python 之 推導式

python 之 推導式

 推導式 : 英文 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)