真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python知識(shí)點(diǎn):列表推導(dǎo)式(listcomprehension)

Python里面有個(gè)很棒的語(yǔ)法糖(syntactic sugar),它就是  list comprehension  ,有人把它翻譯成“列表推導(dǎo)式”,也有人翻譯成“列表解析式”。名字聽上去很難理解,但是看它的語(yǔ)法就很清晰了。雖然名字叫做 list comprehension,但是這個(gè)語(yǔ)法同樣適用于dict、set等這一系列可迭代(iterable)數(shù)據(jù)結(jié)構(gòu)。

在興海等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,興海網(wǎng)站建設(shè)費(fèi)用合理。

語(yǔ)法規(guī)范:

out_list = [out_express for out_express in input_list if out_express_condition]

其中的  if  條件判斷根據(jù)需要可有可無(wú)。

下面看一個(gè)具體的例子,生成一個(gè)包含10以內(nèi)的偶數(shù)的list:

In [1]: evens = [i for i in range(10) if i % 2 == 0]
In [2]: evens
Out[2]: [0, 2, 4, 6, 8]

由for循環(huán)升級(jí)到列表推導(dǎo)式:

在沒有了解 list comprehension 之前,上面那個(gè)生成偶數(shù)list的通常做法是用 for 循環(huán):

evens = []for i in range(10):    if i % 2 == 0:
        evens.append(i)

很明顯, for 循環(huán)占用了4行代碼,而  list comprehension  只用了1行代碼。

文章開始說(shuō)到推導(dǎo)式的語(yǔ)法規(guī)范時(shí),我們講了 if 表達(dá)式是可有可無(wú)的,這也符合我們編程遇到的實(shí)際情況。比如,要生成一個(gè)10以內(nèi)的整數(shù)的平方的列表:

squares = [i**2 for i in range(10)]

復(fù)雜的嵌套循環(huán)

我們先來(lái)看一個(gè)例子,把一個(gè)矩陣(以列表為元素的列表)展平為一個(gè)列表。首先,我們用 for 循環(huán)來(lái)實(shí)現(xiàn)一下:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]
flattened = []for row in matrix:    for i in row:
        flattened.append(i)

接著我們用列表推導(dǎo)式實(shí)現(xiàn)該功能:

flattened = [i for row in matrix for i in row]

還是一行代碼就搞定,但一行里面有兩個(gè) for ,看起來(lái)很亂,兩個(gè) for ,哪個(gè)在前哪個(gè)在后呢? 只要記住他們的順序和不用推導(dǎo)式的原始for循環(huán)是一致的即可。

推導(dǎo)式的可讀性

一行代碼搞定幾行代碼的事情,看上去很簡(jiǎn)潔,但是讀起來(lái)很費(fèi)勁,尤其是當(dāng)條件語(yǔ)句很長(zhǎng)的時(shí)候,把這一行代碼變得很長(zhǎng),超過了代碼規(guī)范規(guī)定的長(zhǎng)度(一般是80個(gè)字符),也使得理解代碼變得困難。

面對(duì)一行長(zhǎng)長(zhǎng)的代碼該如何下口讀,如何理解呢?別著急,好在Python允許在中括號(hào)、花括號(hào)之間斷行:

列表推導(dǎo)式的斷行:

斷行前:

evens = [i for i in range(10) if i % 2 == 0]

斷行后:

evens = [    i    for i in range(10)    if i % 2 == 0]

帶嵌套循環(huán)的推導(dǎo)式的斷行:

斷行前:

flattened = [i for row in matrix for i in row]

斷行后:

flattened = [
    i    for row in matrix    for i in row
]

字典(dict)和集合(set)的推導(dǎo)式:

前面我們也提到過,推導(dǎo)式不僅僅適用于列表,它同樣使用于字典dict和集合set。

把一個(gè)字典的key和value互換:

changed = {value: key for key, value in input_dict.items()}

用一個(gè)列表的所有單詞的首字母生成一個(gè)集合:

chars = {w[0] for w in words_list}

通過以上講解就可以輕松掌握Python的列表推導(dǎo)式( list comprehension )了,簡(jiǎn)而言之, 就是把普通的多行for循環(huán)壓縮成一行代碼,這種壓縮語(yǔ)法適用于列表、字典、集合等可迭代數(shù)據(jù)結(jié)構(gòu)(iterables)。

在這里跟大家一起分享Python知識(shí),一方面我自已也在寫一個(gè) Python教程 的博客: 猿人學(xué) 和公從號(hào)猿人學(xué)Python,從Python基礎(chǔ)教程到 Python技術(shù)雜談 ,和一些利用 Python爬蟲掙錢的思路 ,都在我的個(gè)人博客中首發(fā),興趣的朋友可以關(guān)注一下。


標(biāo)題名稱:Python知識(shí)點(diǎn):列表推導(dǎo)式(listcomprehension)
分享URL:http://weahome.cn/article/ghodoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部