据我所知,唯一的区别是速度,您必须在定义 lambda 函数时稍微花点心思。
例如:
map(lambda x: x + 1, range(4)) == [(lambda x: x + 1)(y) for y in range(4)]
在我看来,第二种方式更像 pythonic,但我不确定为什么。
编辑:
是的,我知道 lambda 会在第二个示例中被排除,我只是想尽可能显示等效代码。
最佳答案
正确的做法是
[y + 1 for y in range(4)]
这里不需要构造lambda
函数。您的代码会在列表理解的每次迭代中不必要地构建一个新的函数对象。
也就是说,您可以将对 map()
的任何调用编写为等效的列表理解。如果 map()
的第一个参数是 lambda
函数,通常首选列表理解。如果 map()
的第一个参数是函数名,则两种变体都可以。有些人(包括我)更喜欢,比如说,
map(str, my_list)
而其他人更喜欢
[str(x) for x in my_list]
关于dictionary - 在 python 中,map(func,list) 和 [func(x) for x in list] 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9843741/