1. 程式人生 > >Python_列表推導式_生成器的表達式_各種推導式_40

Python_列表推導式_生成器的表達式_各種推導式_40

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(老母雞) forin 老母雞: 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