列表生成式|讓你的代碼簡(jiǎn)潔又美觀

本文作者:陳丹慧拱层,中南財(cái)經(jīng)政法大學(xué)金融學(xué)院
文字編輯:任?哲
技術(shù)總編:張馨月

導(dǎo)讀

已知列表list1=[1,2,3,4,5,6,7,8,9,10],如果我們想把list1中每個(gè)元素都加上2010夺衍,生成一個(gè)新列表璧瞬,該怎么做呢?

勤奮的小白會(huì)這樣做:

list1=list(range(1,11))
list2=[]
for i in list1:
    list2.append(i+2010)
list2       
image01.png

而用列表生成式(List Comprehensions)一行就能代替上述代碼:

[i+2010 for i in range(1,11)]
image02.png

是不是很神奇呢唉俗?一行代碼就創(chuàng)造了有規(guī)律的新列表陌凳,看起來(lái)就像一根藤上結(jié)出了果實(shí)。今天须肆,我就來(lái)帶大家玩轉(zhuǎn)列表生成式匿乃,掌握列表生成式的更多用法。

1.語(yǔ)法

根據(jù)Python官方文檔的說明豌汇,列表生成式是一種簡(jiǎn)便快捷地創(chuàng)造列表的方式幢炸。它通常是用來(lái)創(chuàng)建一個(gè)新列表,這個(gè)新列表的元素是在可迭代對(duì)象(包括字符串拒贱、元組宛徊、列表、字典逻澳、集合等可被for遍歷循環(huán)的對(duì)象)的基礎(chǔ)上生成的闸天。

(1)基本語(yǔ)法

[exp for iter_var in iterable]

作用過程:迭代iterable中的元素,再根據(jù)表達(dá)式exp計(jì)算出一個(gè)新值赡盘,最后將所有計(jì)算出的新值放在列表中号枕,就生成了一個(gè)新的列表缰揪。

剛剛在導(dǎo)讀中給大家展示了用列表生成式在list1的基礎(chǔ)上生成list2陨享,這里再詳解一下它的作用過程:

[i+2010 for i in range(1,11)]

首先我們知道range(1,11)生成一個(gè)1到10的有序序列,它是可以被for遍歷循環(huán)的钝腺。第一輪時(shí)抛姑,賦值i=1,再根據(jù)"i+2010"算出新值"2011"艳狐;第二輪時(shí)定硝,賦值i=2,再根據(jù)表達(dá)式算出新值"2012"……最后一輪時(shí)毫目,賦值i=10蔬啡,根據(jù)表達(dá)式算出的新值為"2020"。這些新值會(huì)按照順序排列放在一個(gè)的新列表中被返回镀虐,即我們?cè)趯?dǎo)讀中看到的輸出結(jié)果箱蟆。

(2)增加if語(yǔ)句過濾功能

[exp for iter_var in iterable if_exp]

作用過程:迭代iterable中每個(gè)元素,每次迭代都判斷下if_exp表達(dá)式是否為真刮便,如果為True則執(zhí)行下一步空猜,將返回元素通過exp得到一個(gè)新值;如果為False,則丟棄該元素辈毯,進(jìn)行下一次迭代坝疼。最后,所有通過exp計(jì)算出來(lái)的新值將以一個(gè)新列表的形式返回谆沃。

我們用它來(lái)實(shí)現(xiàn)以下功能:過濾原列表list3=[-4,-2,0,2,4]中的負(fù)數(shù)钝凶。

list3=[-4,-2,0,2,4]
list4=[]
#不用列表生成式
for x in list3:
    if x>=0:
        list4.append(x)
#使用列表生成式
list4=[x for x in list3 if x >=0]
list4
out3.png

(3)嵌套循環(huán)

[exp for iter_var_A in iterrable_A for iter_var_B in iterable_B]

作用過程:先迭代iterable_A中的元素,每當(dāng)?shù)粋€(gè)iterable_A中的一個(gè)元素唁影,隨之就會(huì)把iterable_B中每個(gè)元素都迭代一遍腿椎,最后根據(jù)表達(dá)式exp算出新值,并返回一個(gè)新列表夭咬。

乍一看啃炸,是不是頭皮發(fā)麻。不要怕卓舵,看了下面的例子你會(huì)豁然開朗南用。

給定list5=["星期","周"]list6=["一","二","三","四","五","六","七"]掏湾,用列表生成式生成一個(gè)新列表list7裹虫,將新列表中元素為list5,list6對(duì)應(yīng)位置元素相加融击,代碼如下:

list5=["星期","周"]
list6=["一","二","三","四","五","六","日"]
list7=[]
#不使用列表生成式
for i in list5:
    for j in list6:
        list7.append("%s"%i+"%s"%j)
#使用列表生成式
list7=["%s"%i+"%s"%j for i in list5 for j in list6]
list7           

最后輸出結(jié)果如下:

out4.png

2.應(yīng)用

(1)字典里的應(yīng)用

列表生成式結(jié)合字典的items方法筑公,可以生成鍵值對(duì)列表:

dict={"Jack":179,"Rose":172}
list=[k+"身高為"+str(v)+"cm" for k,v in dict.items()]
list

輸出結(jié)果如下:

out5.png

(2)批量去空格

結(jié)合字符串的strip方法來(lái)刪除原列表中所有字符串元素中的空白字符,生成一個(gè)新列表:

list=[' 爬蟲','  俱','樂部  ']
[s.strip() for s in list2]

輸出結(jié)果如下:

out6.png

(3)輸出某個(gè)目錄下所有文件夾和文件名

結(jié)合os模塊尊浪,列表生成式能輸出某個(gè)目錄下所有文件夾和文件名

import os
[d for d in os.listdir("E:/Python/python基礎(chǔ)")]

輸出結(jié)果如下:

image23.png

今天的介紹就到這里了匣屡。希望大家能好好應(yīng)用列表生成式,讓你的代碼簡(jiǎn)潔又美觀拇涤!之后我們還會(huì)介紹更多有趣的知識(shí)捣作,來(lái)幫你提升效率,敬請(qǐng)期待哦鹅士!


1ae8c76224e0e3302cd69df5cd8bb86.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末券躁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掉盅,更是在濱河造成了極大的恐慌也拜,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趾痘,死亡現(xiàn)場(chǎng)離奇詭異慢哈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扼脐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門岸军,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奋刽,“玉大人,你說我怎么就攤上這事艰赞∮缎常” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵方妖,是天一觀的道長(zhǎng)狭魂。 經(jīng)常有香客問我,道長(zhǎng)党觅,這世上最難降的妖魔是什么雌澄? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮杯瞻,結(jié)果婚禮上镐牺,老公的妹妹穿的比我還像新娘。我一直安慰自己魁莉,他們只是感情好睬涧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旗唁,像睡著了一般畦浓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上检疫,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天讶请,我揣著相機(jī)與錄音,去河邊找鬼屎媳。 笑死夺溢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剿牺。 我是一名探鬼主播企垦,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晒来!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起郑现,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤湃崩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后接箫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攒读,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年辛友,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薄扁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剪返。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邓梅,靈堂內(nèi)的尸體忽然破棺而出脱盲,到底是詐尸還是另有隱情,我是刑警寧澤日缨,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布钱反,位于F島的核電站,受9級(jí)特大地震影響匣距,放射性物質(zhì)發(fā)生泄漏面哥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一毅待、第九天 我趴在偏房一處隱蔽的房頂上張望尚卫。 院中可真熱鬧,春花似錦尸红、人聲如沸焕毫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邑飒。三九已至,卻和暖如春级乐,著一層夾襖步出監(jiān)牢的瞬間疙咸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工风科, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撒轮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓贼穆,卻偏偏與公主長(zhǎng)得像题山,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子故痊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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