個人覺得列表推導式非常強大,在實戰中也經常用到
所謂列表推導式就是使用列表結合for迴圈快速建立乙個新的列表,列表推導式返回的是乙個列表型別
python在執行列表推導式時,會對可迭代物件 l 進行迭代,將每一次迭代的值賦給迴圈變數 x ,然後收集變數表示式 x ** 2 的計算結果,最終由這些結果構成了新的列表,也就是列表推導式所返回的值。
只要支援 for 迴圈進行迭代的物件,都可以對它使用列表推導式。
舉例(找出列表中所有』a』的元素,並新增到新列表)
list=[
'a',
'b',
'a',
'd',
'e',
'a',
'g']
result =
for i in
list
:if i ==
'a':
print
(result)
結果
[
'a',
'a',
'a']
那麼有了列表推導式,我們可以改寫成
print
([i for i in
list
if i ==
'a']
)
結果
[
'a',
'a',
'a']
如果我們列表中的元素還需要做其他運算,比如:
def
add(parms)
: res =
''.join(parms +
'pple'
)return res
再結合上面的列表推導式
print
([add(i)
for i in
list
if i ==
'a']
)
結果
[,,
]
列表推導式的一般語法可以表示為 [ expression for item in list ],如果你希望加上一些布林型條件語句,那麼上面的語法可以修改為 [ expression for item in list if conditional ] 或者
[expression for x in x [if condition]
for y in y [if condition]
…for n in n [if condition]
]舉例(為了方便好看,寫成下面格式)
print([
(x, y, z)
for x in
range(6
)if x %3==
0for y in
range(6
)if y %3==
1for z in
range(6
)if z %2==
1])
結果
[(0
,1,1
),(0
,1,3
),(0
,1,5
),(0
,4,1
),(0
,4,3
),(0
,4,5
),(3
,1,1
),(3
,1,3
),(3
,1,5
),(3
,4,1
),(3
,4,3
),(3
,4,5
)]
lambda 是一種匿名函式,也非常好用的,它不需要定義函式名,可以做最直觀的運算
還是以上面的例子為例
def
add(parms)
: res =
''.join(parms +
'pple'
)return res
直接寫成
add =
(lambda parms:
''.join(parms+
'pple'))
print
(add(
'a')
)
結果
那麼我們為什麼要用上面的表示式?很大一部分原因在於,當我們想執行一些簡單運算時,可以不需要定義真實函式就能完成。例如排序列表元素,一種直觀的方法可以使用 sorted() 方法:
print
(sorted([
0,-3
,3,-
2,2]
, key=
lambda x: x **
2, reverse=
true
))
結果
[-3
,3,-
2,2,
0]
上面就是根據每個元素的二次方進行從大到小的排列
map 是乙個簡單的函式,屬於python的內建函式,它可以將某個函式應用到其它一些序列元素,例如列表
最簡單的例子
x =
map(
lambda x: x **2,
[1,2
,3])
print
(list
(x))
結果
[1,
4,9]
注意:map函式返回的迭代器只能迭代一次,迭代之後會自動清空
x =
map(
lambda x: x **2,
[1,2
,3])
print
(list
(x))
print
(list
(x))
結果
[1,
4,9]
上面輸出了兩次,第一次有資料,第二次為空,所以我們在開發過程中,將map函式返回的迭代器儲存轉為list,可以多次使用
x =
map(
lambda x: x **2,
[1,2
,3])
y =list
(x)print
(y)print
(y)
結果
[1,
4,9]
[1,4
,9]
有興趣的朋友可以看看原始碼 Python之列表推導式
如下是python官方文件中列表推導式部分的譯文,筆者對於該部分也是初學,只能從官方文件學起了。有不合適的地方還望指正,謝謝。python官網列表推導式部分 一 列表推導式 列表推導式提供了一種建立list的簡便方法。應用程式建立列表時,列表中的元素 於其他序列 可迭代物件或建立的乙個滿足一定條件的...
Python學習小技巧之列表項的推導式與過濾操作
典型 1 data list 1,2,3,4,0,1,2,6,8,9 data list copy item for item in data list print data list print data list copy 輸出1 1,2,3,4,0,1,2,6,8,9 1,2,3,4,0,1,...
python之列表推導式篇
商品打折 python列表推導式 打折 newlistname expression for in var listname 大於 newlistname var for var in listname if condition newlistname 新生成的列表名稱 expression 表示式...