python學習筆記-tip22(高階特性-列表生成式)

weixin_34050427發表於2018-08-31

列表生成式

故名思議,就是建立list的生成式,通過這個「列表生成式」可以得到一個list

那麼我們沒有用 「列表生成式」的之前,我們會使用比較笨的方法去建立list,如

    nums=[1,2,3,4,5,6]

或者通過range

    nums=list(range(6))

除了這兩種方法之外,好像沒有別的辦法了
但是列表生成式的出現,讓我們有了新方法

列表生成式的寫法

我們以實際例子來看:
比如我們想定義一個

[1*1,2*2,3*3,4*4,5*5...10*10]

這樣的list,那麼我們先用笨方法實現以下

    nums=[]
    for i in range(1,11):
          nums.append(i*i)

這樣就能把nums填充好,如下示例圖所示:


2742735-9097a031a04b2381.png

看著其實也不是很複雜,但是 我們現在用「列表生成式」來試一下

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

這樣就可以了,是不是很簡單
我們來驗證一下


2742735-794a4412b3297903.png

發現,果然跟我們用笨方法實現的一樣。
那麼接下來我們來看看「列表生成式」的書寫規律

「列表生成式」的書寫規律

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

我們對比“笨方法”和“好方法”的區別,發現
寫列表生成式時,把要生成的元素" i*i "放到前面,後面跟for迴圈,就可以把list建立出來

除此之外,在「列表生成式」的for迴圈之後,還可以新增判斷,比如我們可以篩選出只有偶數的結果,寫法如下

  nums=[i*i for i in range(1,11) if i%2==0]

執行效果圖如下


2742735-8908c39176834add.png

除了新增條件判斷,還可以實現雙層迴圈,寫法如下

    arrays=[m+n for m in 'ABC' for n in '123']

效果圖如下


2742735-796fd2bf9ddd54d8.png

當然,多層的迴圈也是可以實現的,只不過用處不大

通過「列表生成式」實現的有用的小案例

  • 展示當前目錄下的所有檔名和目錄名(需用到os模組)


    2742735-547247d43ec3aa21.png
  • for迴圈使用兩個變數遍歷dict


    2742735-ded324b8d9f1e457.png
  • 把一個list中的字串變成小寫(用到了字串的lower()方法)


    2742735-fa0921c620a61caa.png

總結

「列表生成式」的寫法其實就是把以前的笨方法的處理,前置了,並且基於這個思路再往後邊新增判斷,或者是另外的迴圈。
寫法也是比較簡單的,大家可以多多練習一下,很快就能上手哦

相關文章