第5章:python推導(dǎo)式

Python 推導(dǎo)式是一種獨(dú)特的數(shù)據(jù)處理方式筋栋,可以從一個數(shù)據(jù)序列構(gòu)建另一個新的數(shù)據(jù)序列的結(jié)構(gòu)體栋猖。

Python 支持各種數(shù)據(jù)結(jié)構(gòu)的推導(dǎo)式:

  • 1)列表(list)推導(dǎo)式
  • 2)字典(dict)推導(dǎo)式
  • 3)集合(set)推導(dǎo)式
  • 4)元組(tuple)推導(dǎo)式
    推導(dǎo)式可以利用 range 區(qū)間肄程、元組、列表辞做、字典和集合等數(shù)據(jù)類型露懒,快速生成一個滿足指定需求的列表/字典/集合/元組。

1. 列表(list)推導(dǎo)式

列表推導(dǎo)式格式為:

[表達(dá)式 for 變量 in 列表]
[expression for item in Sequence ]
或者
[表達(dá)式 for 變量 in 列表 if 條件]
[expression for item in Sequence if condition]

  • expression:列表生成元素表達(dá)式读宙,可以是有返回值的函數(shù)彻秆。
  • for item in Sequence:迭代 Sequence 將 item 傳入到 expression 表達(dá)式中。
  • if condition:條件語句结闸,可以過濾列表中不符合條件的值唇兑。

示例1:將列表names的字符串,轉(zhuǎn)換成大寫字母

>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper() for name in names]
>>> new_names
['BOB', 'TOM', 'ALICE', 'JERRY', 'WENDY', 'SMITH']

示例2:計算 30 以內(nèi)可以被 3 整除的整數(shù):

>>> ans = [x for x in range(30) if x%3==0]
>>> ans
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

2. 字典(dict)推導(dǎo)式

字典推導(dǎo)基本格式:

{ key_expr: value_expr for value in collection }

{ key_expr: value_expr for value in collection if condition }

示例1:根據(jù)列表中各字符串及其長度創(chuàng)建字典

>>> listdemo = ['Google','Runoob', 'Taobao']
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
{'Google': 6, 'Runoob': 6, 'Taobao': 6}

示例2:提供三個數(shù)字桦锄,以三個數(shù)字為鍵扎附,三個數(shù)字的平方為值來創(chuàng)建字典

>>> dict1 = {x:x**2 for x in (1,2,3)}
>>> dict1
{1: 1, 2: 4, 3: 9}

3. 集合(set)推導(dǎo)式

集合推導(dǎo)式基本格式:

{ expression for item in Sequence }

{ expression for item in Sequence if conditional }

示例1:計算數(shù)字 1,2,3 的平方數(shù)

>>> new_set = {x**2 for x in range(1,4)}
>>> new_set
{1, 4, 9}

示例2:判斷不是 abc 的字母并輸出

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

4. 元組(tuple)推導(dǎo)式

元組推導(dǎo)式返回的結(jié)果是一個生成器對象,而不是元組
元組推導(dǎo)式基本格式:

(expression for item in Sequence )

(expression for item in Sequence if conditional )

示例1:生成一個包含數(shù)字 1~9 的元組

>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50>  # 返回的是生成器對象
>>> tuple(a)       # 使用 tuple() 函數(shù)结耀,可以直接將生成器對象轉(zhuǎn)換成元組
(1, 2, 3, 4, 5, 6, 7, 8, 9)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末留夜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子图甜,更是在濱河造成了極大的恐慌碍粥,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黑毅,死亡現(xiàn)場離奇詭異嚼摩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)矿瘦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門枕面,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匪凡,你說我怎么就攤上這事膊畴。” “怎么了病游?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我衬衬,道長买猖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任滋尉,我火速辦了婚禮玉控,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狮惜。我一直安慰自己高诺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布碾篡。 她就那樣靜靜地躺著虱而,像睡著了一般。 火紅的嫁衣襯著肌膚如雪开泽。 梳的紋絲不亂的頭發(fā)上牡拇,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機(jī)與錄音穆律,去河邊找鬼惠呼。 笑死,一個胖子當(dāng)著我的面吹牛峦耘,可吹牛的內(nèi)容都是我干的剔蹋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼辅髓,長吁一口氣:“原來是場噩夢啊……” “哼滩租!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起利朵,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤律想,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绍弟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體技即,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年樟遣,在試婚紗的時候發(fā)現(xiàn)自己被綠了而叼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡豹悬,死狀恐怖葵陵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞻佛,我是刑警寧澤脱篙,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布娇钱,位于F島的核電站,受9級特大地震影響绊困,放射性物質(zhì)發(fā)生泄漏文搂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一秤朗、第九天 我趴在偏房一處隱蔽的房頂上張望煤蹭。 院中可真熱鬧,春花似錦取视、人聲如沸硝皂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稽物。三九已至,卻和暖如春丢早,著一層夾襖步出監(jiān)牢的瞬間姨裸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工怨酝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傀缩,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓农猬,卻偏偏與公主長得像赡艰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子斤葱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容