python 中關於推導式生成器的一些總結

2021-09-23 20:29:29 字數 1832 閱讀 5741

推導式:

可以理解為是資料生成方式或者是處理方式

型別:列表,元組,字串,字典,集合

外部包裝的括號決定了返回值型別的 定義[表示式 for迴圈 if語句]

1)對列表中的每項元素進行立方運算(變換功能)

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

b = [x ** 3 for x in a]

print(a)

print(b)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

還可以篩選出自己想要,比如只要3以及3的倍數進行立方運算

b = [x ** 3 for x in a if x % 3 == 0]

print(b)

[27, 216, 729]

2)支援多層for迴圈

將乙個巢狀列表轉換成乙個一維列表。

我們看到a是乙個巢狀列表,如果按照我們普通的做法的話,就需要先定義乙個空列表c

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

c=for i in a:

for j in i:

print(c)

#一共需要五行**,而如果用列表推導式的話就只需要兩行**

b = [j for i in a for j in i]

print(b)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

[1, 2, 3, 4, 5, 6, 7, 8, 9]

題目1:

現在要做乙個字典,key是a>>z,然後值是1>>26,用字典推導式的話就可以很快做出來了

mylist=[chr(var) for var in range(97,123)]

mydict=

print(mydict)

題目2:

data=

#要求取出:weibo,weixin,zhihu,baidu_tieba,baidu_new,toutiao的鍵值對存放到乙個字典裡面,並新增乙個欄位true_num,值為該字典中true個數。

#我們如果用以前的做法:

#結果#我們嘗試使用一下推導式

a =

dict=dict()},**(a))

print(dict)

#結果

上述兩種方法輸出的字典有些許不同,我也不知道怎麼解釋,有大神看到的話可以幫我解釋一下嗎

(表示式 for迴圈 if語句)——> generator

generator.__next__()函式 

獲取生長器中的資料

生成器中的資料只有呼叫,for循壞迭代訪問:

維護了一套演算法在生成器中

使用資料的時候,才會生成乙個個的資料

好處,節省記憶體

stopiteration:資料結束異常

標識乙個序列 迭代器 結束,stopiteration

python生成器推導式

1.生成器推導式是繼列表推導式後的有一中python推導式,他比列表推導式速度更快,占用的記憶體也更少。2.使用生成器物件時,可以根據需要將他轉化為列表或者元組,也可以是喲個生成器對像 next 方法或內建函式next 進行遍歷,其具有惰性求值的特點,進行一次遍歷後便不能再次方位內部元素,即訪問一次...

生成器,生成器推導式和列表推導式

python社群,大部分生成器和迭代器是一種 生成器的本質是迭代器 唯一區別 生成器是我們自己用python 構建的資料結構 迭代器都是提供的,或者轉化得來的 生成器函式 生成器表示式 python提供的 yield 乙個next 對應乙個yield yield和下乙個yield中間有 的話只執行乙...

推導式 生成器

1.推導式生成列表 表示式 for item in 可迭代物件 或者 表示式 for item in 可迭代物件 if 條件判斷 推導式生成列表 ls x for x in range 1,5 if x 2 0 2,4 2.生成器生成元組 表示式 for item in 可迭代物件 或者 表示式 f...