列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的可以用來創建list的生成式。 通常我們在迴圈遍歷一個列表時,都是通過for迴圈來完成 L = [] for i in range(1,11) L.append(x*x) 結果如下: [1,4,9,16,25,3 ...
列表生成式即List Comprehensions,是Python
內置的非常簡單卻強大的可以用來創建list的生成式。
通常我們在迴圈遍歷一個列表時,都是通過for
迴圈來完成
L = []
for i in range(1,11)
L.append(x*x)
結果如下:
[1,4,9,16,25,36,49,64,81,100]
然而,python號稱是人生苦短,我用python,那麼簡單的方法會是什麼呢?答案當然是有的
[x * x for x in range(1,11)]
[1,4,9,16,25,36,49,64,81,100]
通過運行我們發現,可以得到以上的同樣結果,這就是python的強大之處,可以簡化代碼,減少程式員的工作量
我們在寫出成列表生成式時,需要把要生成的元素或者表達式寫在前面,然後後面跟上for迴圈
,就可以把list
創建出來。
for迴圈後面還可以加上if判斷語句:
[x * x for x in range(1,11) if x % 2 == 0]
[4,16,36,64,100]
if--else的用法
這裡需要註意的是:
不能在
for
後面的if
語句後加上else
else 要在for迴圈之前,否則會報錯
例子:
[錯誤樣式]
[x for x in range(1, 11) if x % 2 == 0 else 0]
File "<stdin>", line 1
[x for x in range(1, 11) if x % 2 == 0 else 0]
^
SyntaxError: invalid syntax
將 if 單獨寫在 for 前面也會報錯
[x if x % 2 == 0 for x in range(1, 11)]
File "<stdin>", line 1
[x if x % 2 == 0 for x in range(1, 11)]
^
SyntaxError: invalid syntax
[正確樣式]
[x if x % 2 == 0 else -x for x in range(1, 11)]
[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
這樣子就可以正常輸出了
原因:
- for前面的部分是一個表達式,它必鬚根據x計算出一個結果。因此,考察表達式:x if x % 2 == 0,它無法根據x計算出結果,因為缺少else,必須加上else
- 跟在for後面的if是一個篩選條件,不能帶else,否則如何篩選?
- 可見,在一個列表生成式中,for前面的if ... else是表達式,而for後面的if是過濾條件,不能帶else。
迴圈還可以用好幾層,以下演示的是兩層的
[m + n for m in "ABC" for n in "xyz"]
['Ax', 'Ay', 'Az', 'Bx', 'By', 'Bz', 'Cx', 'Cy', 'Cz']
基本上三層及以上的就很少用了
列出當前目錄下的所有文件和目錄名
import os # 導入os模塊
[d for d in os.listdir('.')] # os的listdir可以列出文件和目錄
['chardetect.exe', 'easy_install-3.7.exe', 'easy_install.exe', 'pip.exe', 'pip3.7.exe', 'pip3.exe', 'pyppeteer-install-script.py', 'pyppeteer-install.exe', 'tqdm.exe']
>>> [d for d in o
[d for d in os.listdir('..')] # .表示當前目錄 ..表示上一級目錄
['Animated.py', 'crawler.py', 'DLLs', 'Doc', 'friends.py', 'img', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'pip', 'pip-19.1.1-py2.py3-none-any.whl', 'pip-19.1.1.tar.gz', 'python.exe', 'python3.dll', 'python37.dll', 'pythonw.exe', 'qweqwewqe.py', 'robots', 'Scripts', 'tcl', 'test.txt', 'Tools', 'vcruntime140.dll', '__pycache__']