Python_列表推導式_生成器的表達式_各種推導式_40
阿新 • • 發佈:2019-04-10
print 類型 占用內存 pytho pen eve 整除 tor 小結
列表推導式:
#列表推導式:
egg_list = [] for i in range(10): egg_list.append(‘雞蛋%s‘%i) print(egg_list) egon egg_list=[‘雞蛋%s‘%i for i in range(10)] #列表推導式 print(egg_list)
# print([i*i for i in range(10)])
生成器表達式:
#生成器表達式 g = (i for i in range(10)) print(g) for i in g: print(i) # 括號不一樣 # 返回的值不一樣 === 幾乎不占用內存 老母雞=(‘雞蛋%s‘%i for i in range(10)) #生成器表達式 print(老母雞) for 蛋 in 老母雞: print(蛋) #g = (i*i for i in range(10)) #print(g.__next__())
各種推導式:
完整的列表推導式:
#[每一個元素或者是和元素相關的操作 for 元素 in 可叠代數據類型] #遍歷之後挨個處理 #[滿足條件的元素相關的操作 for 元素 in 可叠代數據類型 if 元素相關的條件] #篩選功能# #30以內所有能被3整除的數 ret = [i for i in range(30) if i%3 == 0] #完整的列表推導式 g = (i for i in range(30) if i%3 == 0) #完整的生成器表達式 print(ret) # #30以內所有能被3整除的數的平方 ret = [i*i for i in (1,2,3,4) if i%3 == 0] #元組推導式 ret = (i*i for i in range(30) if i%3 == 0) print(ret)
# # 例三:找到嵌套列表中名字含有兩個‘e’的所有名字names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘], [‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]] ret1 = [name for lst in names for name in lst if name.count(‘e‘) ==2] ret2 = (name for lst in names for name in lst if name.count(‘e‘) ==2) print(ret1)
字典推導式:
# 例一:將一個字典的key和value對調 mcase = {‘a‘: 10, ‘b‘: 34} #{10:‘a‘ , 34:‘b‘} mcase_frequency = {mcase[k]: k for k in mcase} print(mcase_frequency)
# 例二:合並大小寫對應的value值,將k統一成小寫 mcase = {‘a‘: 10, ‘b‘: 34, ‘A‘: 7, ‘Z‘: 3} #{‘a‘:10+7,‘b‘:34,‘z‘:3} mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase} print(mcase_frequency)
d = {‘a‘: 10} d[‘a‘] #10 # d[‘b‘] #報錯 print(d.get(‘a‘)) #10 print(d.get(‘b‘)) #None print(d.get(‘b‘, 0)) #0
集合推導式,自帶結果去重功能:
squared = {x**2 for x in [1, -1, 2]} print(squared)
#各種推導式 : 生成器 列表 字典 集合
#遍歷操作
#篩選操作
本章小結
可叠代對象:
擁有__iter__方法
特點:惰性運算
例如:range(),str,list,tuple,dict,set
叠代器Iterator:
擁有__iter__方法和__next__方法
例如:iter(range()),iter(str),iter(list),iter(tuple),iter(dict),iter(set),reversed(list_o),map(func,list_o),filter(func,list_o),file_o
生成器Generator:
本質:叠代器,所以擁有__iter__方法和__next__方法
特點:惰性運算,開發者自定義
使用生成器的優點:
1.延遲計算,一次返回一個結果。也就是說,它不會一次生成所有的結果,這對於大數據量處理,將會非常有用。
#列表解析 sum([i for i in range(100000000)])#內存占用大,機器容易卡死 #生成器表達式 sum(i for i in range(100000000))#幾乎不占內存
2.提高代碼可讀性
Python_列表推導式_生成器的表達式_各種推導式_40