在python中map(func,list)和[func(x)for x in list]之间的区别是什么

pla*_*aux 2 python map

据我所知,唯一的区别是速度,你必须在如何定义lambda函数方面有点诡计.

例如:

map(lambda x: x + 1, range(4)) == [(lambda x: x + 1)(y) for y in range(4)]
Run Code Online (Sandbox Code Playgroud)

在我看来,第二种方式更像是pythonic,但我不确定为什么.

编辑:

是的我明白在第二个例子中会排除lambda,我只是想尽可能地显示等效代码.

Sve*_*ach 6

这样做的正确方法是

[y + 1 for y in range(4)]
Run Code Online (Sandbox Code Playgroud)

无需在此构建lambda函数.您的代码将在列表推导的每个迭代中不必要地构建新的函数对象.

也就是说,您可以将任何调用写map()为等效列表理解.如果第一个参数map()lambda函数,则通常首选列表推导.如果第一个参数map()是函数名称,则两个变量都可以.有些人(包括我)更喜欢,比方说,

map(str, my_list)
Run Code Online (Sandbox Code Playgroud)

而其他人更喜欢

[str(x) for x in my_list]
Run Code Online (Sandbox Code Playgroud)

  • 当你想调用一个带有多个参数的函数时,`map`特别好.我更喜欢`map(func,a,b)`到`[func(*args)for zip(a,b)中的args]` (4认同)
  • @Marcin:这在我的翻译中运行.(注意确实需要"1"之后的空格.) (3认同)