日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python推导式多行书写_python三种推导式的详细介绍及其应用示例,强调字典推导的重要性...

發(fā)布時間:2025/3/12 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python推导式多行书写_python三种推导式的详细介绍及其应用示例,强调字典推导的重要性... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

列表推導(dǎo)式構(gòu)建列表的快捷方式,而生成器表達(dá)式則可以用來創(chuàng)建其他任何類型的序列。自python2.7以后,列表推導(dǎo)和生成器表達(dá)式的概念就應(yīng)用到了字典上,所以就有了字典推導(dǎo),以后我們還會遇到集合推導(dǎo)(此處暫不討論)。因此,如果想要更好的學(xué)習(xí)字典推導(dǎo),需要對列表推導(dǎo)和生成器表達(dá)式進(jìn)行充分對掌握。

為什么使用推導(dǎo)式,推導(dǎo)式的應(yīng)用讓代碼的可讀性更強。接下來,我們就一同來驗證為什么說“可讀性更強”。

1.列表推導(dǎo)

示例1:把letter字符串變成Unicode碼位的列表

In [1]: letter='abcdefghr'

In [2]: codes=[]

In [3]: for letter in letter:

...: codes.append(ord(letter))

...:

In [4]: codes

Out[4]: [97, 98, 99, 100, 101, 102, 103, 104, 114]

示例2:把letter字符串變成Unicode碼位的列表的另外一個寫法(即列表推導(dǎo))

In [1]: letter='abcdefghr'

In [2]: codes=[ord(letter) for letter in letter]

In [3]: codes

Out[3]: [97, 98, 99, 100, 101, 102, 103, 104, 114]

如上兩個示例,最終達(dá)到的效果是一致的。但是明顯可以看出,示例2的可讀性更強。大家可能會問,是不是以后就使用列表推導(dǎo)不再使用for循環(huán)來呢?其實不然。通常的原則是,只用列表推導(dǎo)來創(chuàng)建新的列表,并且盡量保持簡短。如果列表推導(dǎo)的代碼超過了兩行,可能就要考慮是不是要用for循環(huán)重寫了。實際上,沒有硬性規(guī)則要求什么時候用什么,或者必須用什么,如何用怎么用,還是需要自己把握。

2.生成器表達(dá)式

與列表推導(dǎo)相比,生成器表達(dá)式是初始化元組、數(shù)組或其他序列類型的更好選擇。原因是生成器表達(dá)式遵守了迭代器協(xié)議,它是逐個的產(chǎn)出元素,而不是構(gòu)造完整列表后,把列表傳遞到函數(shù)里。生成器表達(dá)式與列表推導(dǎo)的語法差不多,不同的是列表推導(dǎo)使用方括號,而生成器表達(dá)式使用的是圓括號。

示例1:使用生成器表達(dá)式初始化元組和數(shù)組

#初始化元組

In [1]: letter='abcdefghr'

In [2]: tuple=tuple(ord(letter) for letter in letter)

In [3]: tuple

Out[3]: (97, 98, 99, 100, 101, 102, 103, 104, 114)

#初始化數(shù)組

In [4]: import array

In [5]: array.array('I',(ord(letter) for letter in letter))

Out[5]: array('I', [97, 98, 99, 100, 101, 102, 103, 104, 114])

如果生成器表達(dá)式是函數(shù)調(diào)用的唯一參數(shù),則不需要再加另外一個圓括號。

array的構(gòu)造方法有兩個參數(shù),第一個參數(shù)確定了數(shù)字的存儲方式。與初始化元組不同,該處有兩個參數(shù),所以生成器表達(dá)式需要用圓括號括起來。

3.字典推導(dǎo)

字典推導(dǎo)可以從任何以鍵值對作為元素的可迭代對象中構(gòu)建出字典。

下面例子就展示了利用字典推導(dǎo)可以把一個裝滿元組的列表編程兩個不同的字典。

創(chuàng)建一個包含成對數(shù)據(jù)的data_name列表,它將直接用在后續(xù)字典的構(gòu)造方法中,具體如下:

In [1]: data_name=[(1561,'祁俊超'),(1560,'鄧亞鑫'),(1559,'黎榮梅'),(1557,'盧雪'),

(1556,'武曉蒙'),(1555,'黃國全'),(1554,'黎榮梅'),(1551,'姚文通'),

(1550,'曾丹丹'),(1548,'武曉蒙')]

In [2]: data_name

Out[2]:

[(1561, '祁俊超'),

(1560, '鄧亞鑫'),

(1559, '黎榮梅'),

(1557, '盧雪'),

(1556, '武曉蒙'),

(1555, '黃國全'),

(1554, '黎榮梅'),

(1551, '姚文通'),

(1550, '曾丹丹'),

(1548, '武曉蒙')]

更改data_name列表中數(shù)據(jù)對的左右位置,姓名為鍵,編號為值。具體如下:

In [3]: name_code={name:code for code,name in data_name}

In [4]: name_code

Out[4]:

{'祁俊超': 1561,

'鄧亞鑫': 1560,

'黎榮梅': 1554,

'盧雪': 1557,

'武曉蒙': 1548,

'黃國全': 1555,

'姚文通': 1551,

'曾丹丹': 1550}

同上面的操作相反,用編號為鍵,姓名為值,并且過濾掉編號大于或等于1560的姓名。具體如下:

In [5]: {code:name for name,code in name_code.items() if code>=1560}

Out[5]: {1561: '祁俊超', 1560: '鄧亞鑫'}

如果對列表推導(dǎo)對概念以及書寫方式已熟知,那么理解字典推導(dǎo)相對容易些。如果對列表推導(dǎo)還不熟知,那么現(xiàn)在應(yīng)該是掌握它導(dǎo)時候了,因為字典推導(dǎo)導(dǎo)表達(dá)形式在其他數(shù)據(jù)類型中慢慢得以體現(xiàn)。同時,使用列表推導(dǎo)和字典推導(dǎo)可以實現(xiàn)對數(shù)據(jù)的過濾效果。

總結(jié)

以上是生活随笔為你收集整理的python推导式多行书写_python三种推导式的详细介绍及其应用示例,强调字典推导的重要性...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。