python學習之列表推導式和生成器表達式

推導式

格式

variable = [out_exp_res for out_exp in input_list if out_exp ==2]
# out_exp_res:列表生成元素表達式,可以是有返回值的函數
# for out_exp in input_list: 迭代input_list將out_exp傳入out_exp_res
# if out_exp == 2:根據條件過濾

列表推導式

  • 例一:30以內所有能被3整除的數
print([i for i in range(0,31) if i%3 == 0])
  • 例二:30以內所有能被3整除的數的平方
print([i*i for i in range(30) if i % 3 == 0])
  • 例三:找到嵌套列表中名字含有兩個‘e’的所有名字

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
         ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

print([name for lst in names for name in lst if name.count('e') >= 2])

練習題

例1:  過濾掉長度小於3的字符串列表,並將剩下的轉換成大寫字母

例2:  求(x,y)其中x是0-5之間的偶數,y是0-5之間的奇數組成的元祖列表

例3:  求M中3,6,9組成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

1.[name.upper() for name in names if len(name)>3] 
2.[(x,y) for x in range(5) if x%2==0 for y in range(5) if y %2==1] 
3. [row[2] for row in M] 

生成器表達式

1.把列表推導式中的[]換成()得到的就是生成器表達式

2.列表解析與生成器表達式都是一種便利的編程方式,只不過生成器表達式更節省內存

3.Python不但使用迭代器協議,讓for循環變得更加通用。大部分內置函數也是使用迭代器協議訪問對象的。

例如:sum函數是Python的內置函數,該函數使用迭代器協議訪問對象,而生成器實現了迭代器協議,所以,我們可以直接這樣計算一系列值的和。

sum(x ** 2 for x in range(4))



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章