python(列表推導式和生成器表達式)


從母雞下蛋的故事講起

1 老母雞 = ('雞蛋%s'%i for i in range(10))
2 print(老母雞)
3 forin 老母雞:
4     print(蛋)
5 g = (i*i for i in range(10))
6 for i in g:
7     print(i)

①把列表解析的[]換成()得到的就是生成器表達式

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

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

  例如sum函數是python的內置函數,該函數使用迭代器協議訪問對象,而生成器實現了迭代器協議。

1 sum(i*2 for i in range(4))

1.列表推導式

 例一:30以內所有能被3整除的數  

1 # 列推導式
2 # [滿足條件的元素相關的操作 for 元素 in  可迭代數據類型 if 元素相關的條件]
3 # 30以為所有能被3整除的數字
4 print([i for i in range(30) if i%3 == 0]) # 完整的列表推導式

例二:30以內所有能被3整除的數的平方

1 # 30以為所有能被3整除的平方
2 print([i*i for i in range(30) if i%3 == 0]) # 完整的列表推導式

例三:找到嵌套列表中名字包含‘e’的所有名字

1 # 找到嵌套列表中名字中含有'e'的所有名字
2 names = [['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe'],
3         ['Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']]
4 ret = [name for lst in names for name in lst if name.count('e') == 2]
5 print(ret)

2.字典推導式

例一:將一個字典的key和value對調

1 # 將一個字典的key和value對調
2 mcase = {'a':10,'b':34}
3 mcase_frequency = {mcase[k]:k for k in mcase}
4 print(mcase_frequency)

例二:合並大小寫對應的value值,講key統一成大寫

1 # 合並大小寫對應的value值,將key統一成小寫
2 # {'a':10+7,'b':34,'z':3}
3 mcase = {'a':10,'b':34,'A':7,'Z':3}
4 mcase_frequency = {k.lower():mcase.get(k.lower(),0)+mcase.get(k.upper(),0) for k in mcase}

3.集合推導式

例子:計算列表中每個值的平方,自帶去重復的功能

1 # 集合推導式 自帶去重功能
2 squared = {x**2 for x in [1,-1,2]}
3 print(squared)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM