列表生成式即list comprehensions,是python內建的非常簡單卻強大的可以用來建立list的生成式。
舉個例子,要生成list[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
可以用list(range(1, 11))
:
>>> list(range(1, 11))[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]
怎麼做?方法一是迴圈:
>>> l =>>> for x in range(1, 11):
...>>>l
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是迴圈太繁瑣,而列表生成式則可以用一行語句代替迴圈生成上面的list:
>>> [x * x for x in range(1, 11)][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
寫列表生成式時,把要生成的元素x * x
放到前面,後面跟for
迴圈,就可以把list建立出來,十分有用
for迴圈後面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
>>> [m + n for m in'abc
'for n in
'xyz']
['ax', '
ay', '
az', '
bx', '
by', '
bz', '
cx', '
cy', '
cz']
三層和三層以上的迴圈就很少用到了
運用列表生成式,可以寫出非常簡潔的**。例如,列出當前目錄下的所有檔案和目錄名,可以通過一行**實現:
>>> importos>>> [d for d in os.listdir('
.')] #
os.listdir可以列出檔案和目錄
['.emacs.d
', '
.ssh
', '
.trash
', '
adlm
', '
', '
desktop
', '
documents
', '
downloads
', '
library
', '
movies
', '
music
', '
pictures
', '
public
', '
virtualbox vms
', '
workspace
', '
xcode
']
for
迴圈其實可以同時使用兩個甚至多個變數,比如dict
的items()
可以同時迭代key和value:
>>> d =>>> for k, v in
d.items():
...
print(k, '='
, v)
...y =b
x =a
z = c
因此,列表生成式也可以使用兩個變數來生成list:
>>> d =>>> [k + '
=' + v for k, v in
d.items()]['
y=b', '
x=a', '
z=c']
把乙個list中所有的字串變成小寫:
>>> l = ['hello
', '
world
', '
ibm', '']
>>> [s.lower() for s inl][
'hello
', '
world
', '
ibm', '
']
python 函式高階 python 函式高階
形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...
Python高階 函式高階
閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...
python 函式 高階函式
filter 函式是 python 內建的另乙個有用的高階函式,filter 函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。例如判斷奇偶數 def...