簡體   English   中英

高階 Map Function 與 Lambda 表達式 Python

[英]High Order Map Function with Lambda Expression Python

我正在嘗試編寫更高階的 function ,它將采用 2 個 lambda 表達式和一個列表,並將返回結果。 我在下面有我的代碼。

#Square
square = lambda x:x ** 2

#Mod_2
mod_2 = lambda x:x % 2

def map(f,x):
  return f(x)

它看起來很簡單,而且應該如此。 這是我得到的錯誤:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "main.py", line 8, in map
    return f(x)
  File "main.py", line 2, in <lambda>
    square = lambda x:x ** 2
TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

結果應該是這樣的:

>>> map(square, [1, 2, 3, 4])
[1, 4, 9, 16]
>>> map(square, [])
[]
>>> map(mod_2, range(1, 11))
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0]

這不是家庭作業,而是更好地理解高階函數的簡單方法。 此外,這不是任何其他提交的重復,因為這是修復我的代碼,而不是如何解決問題本身。 如果需要重新考慮,請回復並告訴我如何。 謝謝!

使用列表推導:

def map(f,x):
    return [f(i) for i in x]

您也可以在這里使用 lambda:

map = lambda f, x: [f(i) for i in x]

或者只使用內置的map()

map() 是一個內置的 function。 你為什么要重新定義它? 刪除 def map()。

#Square
square = lambda x: x**2

#Mod_2
mod_2 = lambda x:x % 2

r1 = list(map(square, [1, 2, 3, 4]))
r2 = list(map(mod_2, range(1, 11)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM