Python-推導(dǎo)式和生成器表達(dá)式

目錄:http://www.reibang.com/p/863c446364a8

一、推導(dǎo)式

推導(dǎo)式分為三種,分別為列表推導(dǎo)式介袜,字典推導(dǎo)式,集合推導(dǎo)式出吹。其中列表推導(dǎo)式為最常用的遇伞。

(一) 列表推導(dǎo)式

定義:用一行代碼構(gòu)建一個(gè)比較復(fù)雜有規(guī)律的列表。

我們通過(guò)程序來(lái)演示列表推導(dǎo)式的作用

首先我們先寫(xiě)一個(gè)普通循環(huán)語(yǔ)句(通過(guò)循環(huán),向列表中添加1~10)

li=[]

for i in range(1,11):

? ? li.append(i)

print(li)

運(yùn)行結(jié)果為:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

那么我們通過(guò)列表推導(dǎo)式來(lái)完成這樣的操作捶牢。

li=[i for i in range(1,11)]

print(li)

運(yùn)行結(jié)果為:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

這樣我們就通過(guò)兩行代碼完成了鸠珠。上面這個(gè)代碼就是列表推導(dǎo)式,接下來(lái)我們將列表推導(dǎo)式進(jìn)行一個(gè)分類:

列表推導(dǎo)式分兩類:循環(huán)模式秋麸、篩選模式

我們對(duì)這兩種模式進(jìn)行一一講解渐排。

循環(huán)模式語(yǔ)法

循環(huán)模式:[變量(加工后的變量)for 變量 in iterable]

下面我們通過(guò)循環(huán)模式我們一些簡(jiǎn)單操作。

1灸蟆、將十以內(nèi)所有整數(shù)的平方寫(xiě)入列表

li1=[i*i for i in range(1,11)]

print(li1)

運(yùn)行結(jié)果為:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

2驯耻、30以內(nèi)所有的偶數(shù)寫(xiě)入列表

li2=[i for i in range(2,30,2) ]

print(li2)

運(yùn)行結(jié)果為:

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

3、從Python1期到Python10期寫(xiě)入列表

li3=["python{}期".format(i) for i in range(1,11) ]

print(li3)

運(yùn)行結(jié)果為:

['python1期', 'python2期', 'python3期', 'python4期', 'python5期', 'python6期', 'python7期', 'python8期', 'python9期', 'python10期']

接下來(lái)我們研究篩選模式炒考。

篩選模式語(yǔ)法:

篩選模式:[變量(加工后的變量)for 變量 in iterable if 條件]

針對(duì)于篩選模式我們進(jìn)行練習(xí)可缚。

1、30以內(nèi)能被3整除的數(shù)

li4=[i for i in range(1,31) if i%3==0]

print(li4)

運(yùn)行結(jié)果為:

[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

2斋枢、過(guò)濾掉長(zhǎng)度小于3的字符串列表帘靡,并將剩下的轉(zhuǎn)換為大寫(xiě)字母

li5=[i.upper()? for i in ["ab","abc","abcd","abcde","abcdef"] if len(i)>=3 ]

print(li5)

運(yùn)行結(jié)果為:

['ABC', 'ABCD', 'ABCDE', 'ABCDEF']

3、找到嵌套列表中名字含有兩個(gè)‘e’的所有名字全部大寫(xiě)

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],

? ? ? ? ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

li6=[j.upper() for i in names for j in i if j.count("e")==2]

print(li6)

運(yùn)行結(jié)果為:

['JEFFERSON', 'WESLEY', 'STEVEN', 'JENNIFER']

列表推導(dǎo)式總結(jié):

缺點(diǎn):

1."有毒"杏慰,列表推導(dǎo)式只能構(gòu)建比較復(fù)雜并且有規(guī)律的列表

2.超過(guò)三層才能構(gòu)建成功的就不建議用列表推導(dǎo)式

3.查找錯(cuò)誤(debug模式)不行

優(yōu)點(diǎn):一行構(gòu)架测柠,簡(jiǎn)單

除了列表推導(dǎo)式以外還有字典推導(dǎo)式和集合推導(dǎo)式。下面我們進(jìn)行簡(jiǎn)單了解缘滥。

(二) 字典推導(dǎo)式

字典推導(dǎo)式顧名思義推導(dǎo)出來(lái)的是字典

實(shí)例

list1 = ['a','b','c']

list2 = ['Danny','Jenny','LiMing']

dic = {list2[i]:list1[i] for i in range(len(list1))}

print(dic)

運(yùn)行結(jié)果為:

{'Danny': 'a', 'Jenny': 'b', 'LiMing': 'c'}

(三) 集合推導(dǎo)式

集合推導(dǎo)式可以幫我們直接生成一個(gè)集合,集合的特點(diǎn);無(wú)序,不重復(fù) 所以集合推導(dǎo)式自帶去重功能

實(shí)例

li7={i for i in range(1,11)}

print(li7)

運(yùn)行結(jié)果為:

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

二轰胁、生成器表達(dá)式

為什么要把推導(dǎo)式與生成器表達(dá)式一塊說(shuō)呢?生成器表達(dá)式和列表推導(dǎo)式的語(yǔ)法上一模一樣,只是把[]換成()就行了朝扼。

語(yǔ)法:

(變量(加工后的變量)for 變量 in iterable)

比如要遍歷1~10:

li8=(i for i in range(1,11))

for i in li8:

? ? print(i)

列表推導(dǎo)式與生成器表達(dá)式區(qū)別

寫(xiě)法上

列表推導(dǎo)式: []

生成器表達(dá)式:? ()

本質(zhì)上

列表推導(dǎo)式:iterable?

生成器表達(dá)式:iterator

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赃阀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子擎颖,更是在濱河造成了極大的恐慌榛斯,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搂捧,死亡現(xiàn)場(chǎng)離奇詭異驮俗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)允跑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)王凑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人聋丝,你說(shuō)我怎么就攤上這事索烹。” “怎么了弱睦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵百姓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我况木,道長(zhǎng)垒拢,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任火惊,我火速辦了婚禮子库,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘矗晃。我一直安慰自己仑嗅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布张症。 她就那樣靜靜地躺著仓技,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俗他。 梳的紋絲不亂的頭發(fā)上脖捻,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音兆衅,去河邊找鬼地沮。 笑死嗜浮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摩疑。 我是一名探鬼主播危融,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雷袋!你這毒婦竟也來(lái)了吉殃?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤楷怒,失蹤者是張志新(化名)和其女友劉穎蛋勺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鸠删,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抱完,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刃泡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乾蛤。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捅僵,靈堂內(nèi)的尸體忽然破棺而出家卖,到底是詐尸還是另有隱情,我是刑警寧澤庙楚,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布上荡,位于F島的核電站,受9級(jí)特大地震影響馒闷,放射性物質(zhì)發(fā)生泄漏酪捡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一纳账、第九天 我趴在偏房一處隱蔽的房頂上張望逛薇。 院中可真熱鬧,春花似錦疏虫、人聲如沸永罚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呢袱。三九已至,卻和暖如春翅敌,著一層夾襖步出監(jiān)牢的瞬間羞福,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工蚯涮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留治专,地道東北人卖陵。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像张峰,于是被迫代替她去往敵國(guó)和親泪蔫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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