Python map函數 用法解說 list處理

入門篇

map函數

map的用法是對iterable object執行一個函數。這時候他就會retrurn一個sequence。具體的用法是像下面這樣。

map(函數,iterable object)

將list中的數字全部變兩倍

舉例來說,我們平常要將數字用函數變成兩倍時會寫一個像下面這樣的code。

def double(n):
    return n * 2
x = 5
y = double(x) #10

但是如果想要將list中的數字全部同時進行這項處理的話我們就會用到map函數。

def double(n):
    return n * 2
data = [1, 2, 3, 4, 5]
data2 = map(double, data) #[2, 4, 6, 8, 10]

這邊要注意的是,在使用map函數的時候,第一項函數不需要指定object只要直接寫出函數名稱就可以了。

另外,如果在這邊我們不使用map函數,而是用一般的for迴圈將list的數字都變成兩倍的話寫法必須要變成下面這樣子。

def double(n):
    return n * 2
data = [1, 2, 3, 4, 5]

data2 = []
for num in data:
    data2.append(double(num))

如果是要用for迴圈的話就必須要利用到append,雖然在這邊看起來跟使用map函數沒什麼差別,但是如果是使用更複雜的函數的時候在寫code的難易度上就會簡單很多。

最後在使用map函數時要注意的是map函數return的值不是list而是sequence,因此雖然可以用for迴圈,index access等等,但是沒有辦法直接使用append來追加內容。另外,如果使用print函數直接輸出return值的話也不會像list一樣,而是sequence。

def double(n):
    return n * 2
data = [1, 2, 3, 4, 5]

data2 = map(double, data)

print(data2) # <map object at 0x3f3dc1c23167>

data2.append(11) #會出現下面的error
# Traceback (most recent call last):
#   File "sample.py", line 9, in <module>
#       data2.append(2)
#       AttributeError: 'map' object has no attribute 'append'

但是如果像要把sequence當成list用的話可以直接用list函數換成list。

def double(n):
    return n * 2
data = [1, 2, 3, 4, 5]

data2 = list(map(double, data))

留言