Python小技巧之列表推導式到匿名函數

Python小技巧之列表推導式到匿名函數

最近又看了一遍python的基礎知識,所謂溫故而知新,哈哈哈,所以在這裏寫下自己的一些見解,我覺得在實戰過程中還是非常有用的一些小技巧,也分享給大家,如果寫的不好,請大家留言或者私信我,一起學習一下!
下面進入正題:

列表推導式

個人覺得列表推導式非常強大,在實戰中也經常用到

所謂列表推導式就是使用列表結合for循環快速創建一個新的列表,列表推導式返回的是一個列表類型

Python在執行列表推導式時,會對可迭代對象 L 進行迭代,將每一次迭代的值賦給循環變量 x ,然後收集變量表達式 x ** 2 的計算結果,最終由這些結果構成了新的列表,也就是列表推導式所返回的值。
只要支持 for 循環進行迭代的對象,都可以對它使用列表推導式。

舉例(找出列表中所有’a’的元素,並添加到新列表)

list = ['a','b','a','d','e','a','g']
result = []
for i in list:
	if i == 'a':
		result.append(i)
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'])

結果

['apple', 'apple', 'apple']

列表推導式的一般語法可以表示爲 [ 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 == 0 
				 for y in range(6) if y % 3 == 1 
				 for 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 和 Map

Lambda 是一種匿名函數,也非常好用的,它不需要定義函數名,可以做最直觀的運算
還是以上面的例子爲例

def add(parms):
	res = ''.join(parms + 'pple')
	return res

直接寫成

add = (lambda parms: ''.join(parms+ 'pple'))
print(add('a'))

結果

apple

那麼我們爲什麼要用上面的表達式?很大一部分原因在於,當我們想執行一些簡單運算時,可以不需要定義真實函數就能完成。例如排序列表元素,一種直觀的方法可以使用 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]

有興趣的朋友可以看看源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章