串列生成式即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__']
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/85042.html
標籤:Python
上一篇:Metaclass
