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))
留言