用于使用参数运行的Python映射列表项

Sus*_*pta 35 python

有没有办法将列表项与参数一起映射到函数.我有一个清单:

pages = [p1, p2, p3, p4, p5...]
Run Code Online (Sandbox Code Playgroud)

我必须调用myFunc与每个列表元素相对应的函数以及其他参数,以便可以计算以下内容

myFunc(p1, additionalArgument)
myFunc(p2, additionalArgument)
Run Code Online (Sandbox Code Playgroud)

等等...

这样做有什么优雅的方法吗?我是新手所以请不要介意.

小智 66

您还可以使用lambda函数:

map(lambda p: myFunc(p, additionalArgument), pages)
Run Code Online (Sandbox Code Playgroud)


Fre*_*Foo 46

使用列表理解:

result = [myFunc(p, additionalArgument) for p in pages]
Run Code Online (Sandbox Code Playgroud)

  • @AdN:`map`有它的用途.`map(f,lst)`比'[f(x)for x in lst]`重复性要小. (5认同)
  • @AFP_555 速度。`for` 循环比映射慢几个数量级。当您处理数百万个对象时,这很重要。 (4认同)
  • 一旦阅读,显然很优雅(副作用是不再使用`map()`...) (2认同)
  • 值得一提的是,地图也比列表理解要快得多。尝试制作一个包含1000个数字的列表,并使用map和list理解来乘以每个元素。尝试此操作时,每个循环映射花费203 ns,使用列表推导每个循环花费317微秒(差异很大)。 (2认同)
  • @JosephFarah不,for循环并不慢,而且肯定不会慢几个数量级。为什么会这样?如果您需要函数调用结果的列表,请使用列表理解。如果您只想调用函数,请使用 for 循环。 (2认同)

Sve*_*ach 38

您可以使用列表理解

[myFunc(p, additionalArgument) for p in pages]
Run Code Online (Sandbox Code Playgroud)

要么 functools.partial()

map(functools.partial(myFunc, some_arg=additionalArgument), pages)
Run Code Online (Sandbox Code Playgroud)

  • @CKI 不期望 `map(partial(...), ...)` 比列表理解更快,除非在一些极端情况下。我只是为了完整性和诸如“pool.map()”之类的用例而添加它。我认为接受的答案非常好,因为列表理解通常被认为是该用例最惯用的解决方案。我无法理解的是,几年后添加的“map(lambda: ..., ...)”答案到底是如何获得如此高的投票的——它比列表理解更慢、更不简洁、可读性更差。 (2认同)