學會Python列表生成式归敬,讓你的代碼“騷”起來!

通過將數(shù)組與字典等數(shù)據(jù)結(jié)構(gòu)靈活組合鄙早,Python可以非常便捷的實現(xiàn)各種復雜的數(shù)據(jù)結(jié)構(gòu)汪茧,但是對于這些復雜數(shù)據(jù)結(jié)構(gòu)的操作代碼有時卻顯得非常的繁瑣和臃腫,對于Python這門如此簡潔高效的語言而言是不能接受的限番。

本文將與你一起學習Python的列表生成式語法舱污,拒絕臃腫代碼,提高執(zhí)行效率弥虐,讓你的代碼“騷”起來扩灯!也可以加小編交流群103456743我們一起學習進步

初探Python列表生成式

在Python開發(fā)過程中,我們經(jīng)常會遇到對數(shù)據(jù)進行一定的處理并生成一個列表的需求霜瘪。例如一個最簡單的需求:產(chǎn)生一個元素為0 – 9的列表珠插,這個需求可以說是再簡單不過了,一個for循環(huán)遍歷range(10)依次添加到列表中即可:

上述代碼的輸出結(jié)果就是一個我們需要的元素為0-9的列表了颖对。

代碼看起來還算比較簡單捻撑,結(jié)構(gòu)上也不復雜,但是還有沒有更簡便的寫法呢缤底?答案當然是有的了布讹!現(xiàn)在就讓我們來使用Python的列表生成式語法對上述代碼進行優(yōu)化:

核心代碼其實只有一行,借助列表生成式語法我們成功的將三行的代碼縮減到了一行训堆,這還是針對最簡單的情況描验,在復雜情況下代碼精簡的效果會更加直觀。

我們來看看輸出結(jié)果對不對坑鱼,上述使用列表生成式語法的輸出結(jié)果為:

輸出結(jié)果來看是我們需要的元素為0-9的列表膘流,我們來詳細分析一下這段使用列表生成式語法的代碼:

my_list就是我們定義的用來存儲0-9元素的列表絮缅,不同的是,一般定義列表變量的方法是my_list = []呼股。上述代碼卻在這對中括號里塞下了一長串代碼耕魄,仔細分析的話,會發(fā)現(xiàn)這是一串用來描述for循環(huán)的代碼彭谁。其中的for index in range(10)就是在我們之前的代碼中用來生成這樣一個列表所使用的for循壞吸奴,而在這個循環(huán)的前面,就是循環(huán)過程中迭代的變量index缠局。

這就是列表生成式語法最基本的樣子:需要生成的元素放在最前面则奥,后面跟for循環(huán),這樣程序就知道狭园,要在這個循環(huán)迭代的過程中读处,將所需的元素依次放入數(shù)組中,最后構(gòu)建出我們需要的數(shù)組唱矛。

列表生成式進階

我們上面的例子還是太過簡單了罚舱,在實際的開發(fā)中需求會復雜許多,那么如何用列表生成式語法來處理更為復雜的情況呢绎谦?實際上列表生成式在實際使用中的功能十分強大管闷,例如我們希望得到一個元素為0×2, 1×2, 2×2, …, 9×2的列表就可以這樣實現(xiàn):

將上述代碼生成的my_list打印出來可以得到下面的輸出:

只需要將生成的元素×2就可以得到我們需要的列表了。除了對所生成的元素進行數(shù)值處理外窃肠,我們還可以借助函數(shù)對其進行更為復雜的操作渐北,例如通過str的lower()函數(shù)我們可以將一個數(shù)組中所有的字符串都變成小寫:

將生成的lower_list打印出來,可以看到old_list里的四個單詞都被變成了小寫:

除了對生成的元素進行處理外铭拧,列表生成式還可以增加if判斷,用來篩選所需的元素恃锉。例如我們希望得到0-10中為偶數(shù)的元素組成的列表搀菩,那么只需要在for循環(huán)的后面增加上index % 2 == 0的判斷對迭代的元素進行過濾即可:

輸出經(jīng)過index % 2 == 0條件過濾得到的數(shù)組可以看到構(gòu)成元素都是我們期望的偶數(shù):

我們可以使用for循環(huán)來同時處理多個變量,同樣的使用列表生成式也可以一次性處理多個變量破托。例如我們有一個數(shù)組肪跋,內(nèi)部元素為一個個的元祖,每個元祖中存儲了一個學生的語數(shù)英三科的成績土砂,我們希望得到這一個新的列表州既,記錄每個學生的平均分,那么我們可以通過列表生成式這樣實現(xiàn):

輸出上述代碼計算得到的平均分列表aves萝映,驗證一下是不是我們要的結(jié)果:

對grades遍歷得到的是一個個的元祖吴叶,我們可以指定與元組長度相等的若干個變量來分別接收元祖內(nèi)的每一個元素,例如上例在for循環(huán)中使用cn序臂、math蚌卤、en三個變量來分別接收元組內(nèi)的語文实束、數(shù)學、英語成績逊彭。要得到三科的平均分咸灿,只需要將這三個變量相加,然后再除以3即可侮叮,其中round函數(shù)可以用來限定Python浮點型數(shù)值的小數(shù)點位數(shù)避矢。

至此我們已經(jīng)初步掌握了Python的列表生成式語法,可以使用它來精簡和優(yōu)化一些簡單的列表生成代碼囊榜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末审胸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锦聊,更是在濱河造成了極大的恐慌歹嘹,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孔庭,死亡現(xiàn)場離奇詭異尺上,居然都是意外死亡,警方通過查閱死者的電腦和手機圆到,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門怎抛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芽淡,你說我怎么就攤上這事马绝。” “怎么了挣菲?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵富稻,是天一觀的道長。 經(jīng)常有香客問我白胀,道長椭赋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任或杠,我火速辦了婚禮哪怔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘向抢。我一直安慰自己认境,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布挟鸠。 她就那樣靜靜地躺著叉信,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艘希。 梳的紋絲不亂的頭發(fā)上茉盏,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天鉴未,我揣著相機與錄音,去河邊找鬼鸠姨。 笑死铜秆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的讶迁。 我是一名探鬼主播连茧,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巍糯!你這毒婦竟也來了啸驯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祟峦,失蹤者是張志新(化名)和其女友劉穎罚斗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宅楞,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡针姿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了厌衙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片距淫。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖婶希,靈堂內(nèi)的尸體忽然破棺而出榕暇,到底是詐尸還是另有隱情,我是刑警寧澤喻杈,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布彤枢,位于F島的核電站,受9級特大地震影響筒饰,放射性物質(zhì)發(fā)生泄漏缴啡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一龄砰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧讨衣,春花似錦换棚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歹茶,卻和暖如春夕玩,著一層夾襖步出監(jiān)牢的瞬間你弦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工燎孟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禽作,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓揩页,卻偏偏與公主長得像旷偿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子爆侣,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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

  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個如下例子萍程,分析運行結(jié)果: 代碼一: a = 1 def...
    伊森H閱讀 3,067評論 0 15
  • 瓶子里的水太滿自然會外溢 如果想贏并不容易 面對困難真的要勇氣 世俗的眼光不用太在意 短暫的不如意千萬別放棄 故事...
    遏山流霧閱讀 216評論 0 0
  • 前言項目中遇到一個頁面翻轉(zhuǎn)的需求,完成之后寫出來希望能幫助到需要的人兔仰。 說說思路首先我們需要翻轉(zhuǎn)的是整個windo...
    追夢小怪獸閱讀 1,796評論 0 1
  • 今天下雨了乎赴,特別的冷忍法。每到這個季節(jié)我就特別的害怕,害怕家里的暖氣壞了无虚,因為我找不到那個可以無怨無悔的修暖氣的人了缔赠。...
    第三個耳洞閱讀 259評論 2 3