不要在 Python 中使用循環(huán),這些方法其實更棒!
我們知道在 Python 中使用循環(huán)速度是很慢,如果你正在處理類似的情況,那該怎么辦呢?
在本文中,我將給大家分享可用于替代 Python 循環(huán)的方法和案例:
- Map
- Filter
- Reduce
在開始使用上述函數(shù)之前,如果你還不熟悉 lambda 函數(shù),讓我們快速了解一下。
Lambda 函數(shù)是常規(guī)函數(shù)的替代方法。它可以在一行代碼中定義,因此在我們的代碼中占用更少的時間和空間。例如,在下面的代碼中,我們可以看到 lambda 函數(shù)的作用。
def multiply_by_2(x):
x*2
lambda 函數(shù)
lambda x: x*2
注意:最好使用 lambda 函數(shù)而不是常規(guī)函數(shù)。
1、Map
使用 map 函數(shù),我們可以將函數(shù)應(yīng)用于可迭代對象(列表、元組等)的每個值。
map(function, iterable)
假設(shè)我們想在一個列表(可迭代對象)中得到一個正方形的數(shù)字。我們將首先創(chuàng)建一個 square() 函數(shù)來查找數(shù)字的平方。
def square(x):
return x*x
然后,我們將使用 map 函數(shù)將 square() 函數(shù)應(yīng)用于輸入數(shù)字列表。
input_list = [2, 3, 4, 5, 6]
# Without lambda
result = map(square, input_list)
# Using lambda function
result = map(lambda x: x*x, input_list)
# converting the numbers into a list
list(result)
# Output: [4, 9, 16, 25, 36]
2、Filter
直觀地說,filter 函數(shù)用于從可迭代對象(列表、元組、集合等)中過濾掉值。過濾條件在作為參數(shù)傳遞給過濾器函數(shù)的函數(shù)內(nèi)設(shè)置。
filter(function, iterable)
我們將使用 filter 函數(shù)來過濾小于 10 的值。
def less_than_10(x):
if x < 10:
return x
然后,我們將使用 Filter 函數(shù)將 less_than_10() 函數(shù)應(yīng)用于值列表。
input_list = [2, 3, 4, 5, 10, 12, 14]
# Without lambda
list(filter(less_than_10, input_list))
# using lambda function
list(filter(lambda x: x < 10, input_list))
# Output: [2, 3, 4, 5]
3、Reduce
Reduce 函數(shù)與 map 和 filter 函數(shù)有點不同。它迭代地應(yīng)用于可迭代對象的所有值,并且只返回一個值。
在下面的示例中,通過應(yīng)用加法函數(shù)來減少數(shù)字列表。最終輸出將是列表中所有數(shù)字的總和,即 15。讓我們創(chuàng)建一個添加兩個輸入數(shù)字的addition() 函數(shù)。
def addition(x,y):
return x + y
接下來,為了獲得列表中所有數(shù)字的總和,我們將把這個加法函數(shù)作為參數(shù)應(yīng)用到 reduce 函數(shù)。
from functools import reduce
input_list = [1, 2, 3, 4, 5]
# Without Lambda function
reduce(addition, input_list))
# With Lambda function
reduce(lambda x,y: x+y, input_list))
# Output: 15