python中的推導式和生成式

2021-10-09 22:02:51 字數 2184 閱讀 3800

對乙個列表(集合,字典)根據條件進行迴圈遍歷,把符合條件的篩選出來並生成新的列表(集合,字典)。括號內可以寫for迴圈和if-else並且可以多層巢狀for、if,甚至可以在裡面再巢狀乙個推導式

中括號內寫入for迴圈,對乙個列表進行遍歷,然後寫乙個if條件判斷,對每次迴圈取出的值進行判斷,結果為true的話將當前遍歷到的值寫入到新生成的列表中。

str1 =

['aaaa'

,'bbb'

,'cccc'

,'ddd'

,'eee'

,'ffff'

,'ggggg'

]formula1 =

[str2 for str2 in str1 if

len(str2)

>=4]

# 迴圈遍歷str列表,通過if表示式判斷把通過的值賦給新的列表

print

(formula1)

formula2 =

[str2.upper(

)for str2 in str1 if

len(str2)

>=4]

# 把列表中長度大於等於4的元素取出並轉換為大寫

print

(formula2)

生成100以內質數

內層巢狀推導式生成所有的非質數

formula3 =

[x for x in

range(2

,101)if

not[y for y in

range(2

, x)

if x % y ==0]

]print

(formula3)

集合推導式使用的是花括號,用法和列表推導式一樣

str1 =

['aaaa'

,'bbb'

,'cccc'

,'ddd'

,'eee'

,'ffff'

,'ggggg'

]formula =

print

(formula)

字典推導式和集合推導式一樣使用花括號,區別是字典推導式同時取出鍵和值,中間用冒號分開。還要注意字典要使用items()函式,該函式將字典的鍵和值以列表方式返回

dict1 =

formula =

print

(formula)

元組推導式又叫生成式。生成式是按照乙個規則生成乙個迭代器。語法和推導式類似,不同的是生成式用小括號,並且規則可以寫成乙個函式。

生成式返回的結果不可以直接列印,需要使用__next__()方法或者next(),每使用一次生成乙個值,呼叫次數不能超過存量,不然會報錯。

注意:同時呼叫兩種方法效果是相互疊加的,比如用__next__()方法返回1,再用next()方法返回的不是1,是繼續__next__()的下乙個值2。

y =

(x for x in

range

(100

)if x %2==

0)for i in

range(25

):print

(y.__next__())

#列印2

print

(next

(y))

#列印3

使用函式完成生成式,這裡的yield是乙個關鍵字,作用是返回乙個值並暫停。我們可以看出來當例項化num()方法時,就是在呼叫num()方法,方法一直在執行,只是yield關鍵字使其進入阻塞狀態,當使用next()呼叫時,方法進入cpu執行,當再次執行到yield語句時,再次進入阻塞狀態

def

num():

# 生成質數的生成器

x =0while

true

: x +=

1 n =

0for i in

range(1

, x +1)

:if x % i ==0:

n +=

1if n ==2:

yield x

g = num(

)# 例項化物件,g就是生成器

for i in

range(20

):print

(next

(g))

Python推導式(生成式)

推導式是從乙個或者多個迭代器快速簡潔的建立資料結構的一種方法。可以將迴圈和條件判斷相結合,從而避免語法冗長的 常見的列表推導式有以下兩種格式 expression for item in iterable 下面通過具體的 舉例說明列表推導式的應用 power list x x for x in ra...

Python列表推導式和生成式

推導式 作用 按一定的邏輯順序,生成列表,簡單且快捷 語法一 表示式 for 變數 in 舊列表 例如生成乙個 1,2,3,4,5,6,7 列表 x for x in range 1 8 或者生成乙個 1,4,9,16,25,36,49,64,81 的列表 x x for x in range 1 ...

Python中的推導式

1.1 列表推導式介紹 python中的列表推導式可以使用非常簡潔的方法來快速生成滿足特定需求的列表,具有非常強的可讀性。另外python的內部實現對列表推導式的大量優化,可以保證很快的執行速度。1.2 列表推導式語法 表示式 for 變數 in 序列或迭代物件 1.3 列表推導式案例 下面三段 的...