創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
這篇文章將為大家詳細(xì)講解有關(guān)Python列表推導(dǎo)式的使用方法,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
for 表達(dá)式(列表推導(dǎo)式)用于利用其他區(qū)間、元組、列表等可迭代對(duì)象創(chuàng)建新的列表。
for 表達(dá)式的語(yǔ)法格式如下:
[表達(dá)式 for 循環(huán)計(jì)數(shù)器 in 可迭代對(duì)象]
從上面的語(yǔ)法格式可以看出,for 表達(dá)式與普通 for 循環(huán)的區(qū)別有以下兩點(diǎn):
在 for 關(guān)鍵字之前定義一個(gè)表達(dá)式,該表達(dá)式通常會(huì)包含循環(huán)計(jì)數(shù)器。
for 表達(dá)式?jīng)]有循環(huán)體,因此不需要冒號(hào)。
for 表達(dá)式當(dāng)然也是有循環(huán)的,它同樣會(huì)對(duì)可迭代對(duì)象進(jìn)行循環(huán),可迭代對(duì)象包含幾個(gè)對(duì)象,該循環(huán)就對(duì) for 之前的“表達(dá)式”執(zhí)行幾次(相當(dāng)于 for 之前的表達(dá)式就是循環(huán)體),并將每次執(zhí)行的值收集起來(lái)作為新的列表元素。
for 表達(dá)式最終返回的是列表,因此 for 表達(dá)式也被稱為列表推導(dǎo)式。
例如如下代碼(程序一):
a_range = range(10) # 對(duì)a_range執(zhí)行for表達(dá)式 a_list = [x * x for x in a_range] # a_list集合包含10個(gè)元素 print(a_list)
上面粗體字代碼將會(huì)對(duì) a_range 執(zhí)行迭代,由于 a_range 相當(dāng)于包含 10 個(gè)元素,因此程序生成的 a_list 同樣包含 10 個(gè)元素,每個(gè)元素都是 a_range 中每個(gè)元素的平方(由表達(dá)式 x*x 控制)。
運(yùn)行上面代碼,可以看到如下輸出結(jié)果:
[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64, 81]
還可以在 for 表達(dá)式后面添加 if 條件,這樣 for 表達(dá)式將只迭代那些符合條件的元素。例如如下代碼:
b_list = [x * x for x in a_range if x % 2 == 0] # a_list集合包含5個(gè)元素 print(b_list)
第一行代碼與程序一中第 3 行代碼大致相同,只是為 for 表達(dá)式增加了 if 條件,這樣程序只處理 range 區(qū)間的偶數(shù),因此程序生成的 b_list 只包含 5 個(gè)元素。
運(yùn)行上面代碼,可以看到如下輸出結(jié)果:
[0 ,4 , 16, 36, 64]
如果將 for 表達(dá)式的方括號(hào)改為圓括號(hào),for 表達(dá)式將不再生成列表,而是生成一個(gè)生成器(generator),該生成器同樣可使用 for 循環(huán)選代。
對(duì)于使用圓括號(hào)的 for 表達(dá)式,它最終返回的是生成器,因此這種 for 表達(dá)式也被稱為生成器推導(dǎo)式。例如如下代碼:
# 使用for表達(dá)式創(chuàng)建生成器 c_generator = (x * x for x in a_range if x % 2 == 0) # 使用for循環(huán)迭代生成器 for i in c_generator: print(i, end='\t') print()
程序中,第 2 行代碼只是將 for 表達(dá)式的方括號(hào)改為圓括號(hào),因此這行代碼將會(huì)創(chuàng)建一個(gè) generator 對(duì)象,接下來(lái)程序使用 for 循環(huán)遍歷了該 generator 對(duì)象。運(yùn)行上面程序,得到如下輸出結(jié)果:
0 4 16 36 64
在前面看到的 for 表達(dá)式都只有一個(gè)循環(huán),實(shí)際上 for 表達(dá)式可使用多個(gè)循環(huán),就像嵌套循環(huán)一樣。例如如下代碼:
d_list = [(x, y) for x in range(5) for y in range(4)] # d_list列表包含20個(gè)元素 print(d_list)
上面代碼中 x 是遍歷 range(5) 的計(jì)數(shù)器,因此該 x 可迭代 5 次;y 是遍歷 range(4) 的計(jì)數(shù)器,因此該 y 可迭代 4 次。因此,該(x,y)表達(dá)式一共會(huì)迭代 20 次。
運(yùn)行上面代碼,可以看到如下輸出結(jié)果:
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]
上面的 for 表達(dá)式相當(dāng)于如下嵌套循環(huán):
dd_list = [] for x in range(5): for y in range(4): dd_list.append((x, y))
當(dāng)然,也支持類似于三層嵌套的 for 表達(dá)式,例如如下代碼:
e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)] # e_list列表包含120個(gè)元素 print(e_list)
對(duì)于包含多個(gè)循環(huán)的 for 表達(dá)式,同樣可指定 if 條件。假如我們有一個(gè)需求:程序要將兩個(gè)列表中的數(shù)值按“能否整除”的關(guān)系配對(duì)在一起。比如 src_a 列表中包含 30,src_b 列表中包含 5,其中 30 可以整除 5,那么就將 30 和 5 配對(duì)在一起。對(duì)于上面的需求使用 for 表達(dá)式來(lái)實(shí)現(xiàn)非常簡(jiǎn)單,例如如下代碼:
src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121] src_b = [3, 5, 7, 11] # 只要y能整除x,就將它們配對(duì)在一起 result = [(x, y) for x in src_b for y in src_a if y % x == 0] print(result)
運(yùn)行上面代碼,可以看到如下輸出結(jié)果:
[(3, 30), (3, 12), (3, 66), (3, 39), (3, 78), (3, 36), (3, 57), (5, 30), (11, 66), (11, 121)]
關(guān)于Python列表推導(dǎo)式的使用方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
文章題目:Python列表推導(dǎo)式的使用方法-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://www.chinadenli.net/article32/dpjjsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、商城網(wǎng)站、建站公司、營(yíng)銷型網(wǎng)站建設(shè)、App設(shè)計(jì)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容