不要在 Python 中使用迴圈,這些方法其實更棒!

語言: CN / TW / HK

我們知道在 Python 中使用迴圈速度是很慢,如果你正在處理類似的情況,那該怎麼辦呢?

在本文中,我將給大家分享可用於替代 Python 迴圈的方法和案例:

  • Map
  • Filter
  • Reduce

在開始使用上述函式之前,如果你還不熟悉 lambda 函式,讓我們快速瞭解一下。

Lambda 函式是常規函式的替代方法。它可以在一行程式碼中定義,因此在我們的程式碼中佔用更少的時間和空間。例如,在下面的程式碼中,我們可以看到 lambda 函式的作用。

def multiply_by_2(x):
    x*2

lambda 函式

lambda x: x*2

注意:最好使用 lambda 函式而不是常規函式。

1、Map

使用 map 函式,我們可以將函式應用於可迭代物件(列表、元組等)的每個值。

map(function, iterable)

假設我們想在一個列表(可迭代物件)中得到一個正方形的數字。我們將首先建立一個 square() 函式來查詢數字的平方。

def square(x):
    return x*x

然後,我們將使用 map 函式將 square() 函式應用於輸入數字列表。

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 函式用於從可迭代物件(列表、元組、集合等)中過濾掉值。過濾條件在作為引數傳遞給過濾器函式的函式內設定。

filter(function, iterable)
我們將使用 filter 函式來過濾小於 10 的值。

def less_than_10(x):
    if x < 10:
        return x

然後,我們將使用 Filter 函式將 less_than_10() 函式應用於值列表。

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 函式與 map 和 filter 函式有點不同。它迭代地應用於可迭代物件的所有值,並且只返回一個值。

在下面的示例中,通過應用加法函式來減少數字列表。最終輸出將是列表中所有數字的總和,即 15。

讓我們建立一個新增兩個輸入數字的addition() 函式。

def addition(x,y):
    return x + y

接下來,為了獲得列表中所有數字的總和,我們將把這個加法函式作為引數應用到 reduce 函式。

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

最近整理了幾百 G 的 Python 學習資料,包含新手入門電子書、教程、原始碼等等,免費分享給大家!想要的前往 “ Python 程式設計學習圈 ”,傳送 “ J ” 即可免費獲得