我一直在尝试使用Python中的map
函数,而且我遇到了一些麻烦。我无法分辨哪些是将函数foo映射到列表栏的正确方法:
map(foo, bar)
或
newBar = map(foo, bar)
我从不同的网站获得了不同的结果。哪些是正确的用法?
答案 0 :(得分:5)
在Python 2中,map()
返回foo(...)
的返回值列表。如果您不关心结果,只想运行bar
到foo
的元素,那么您的任何一个示例都可以使用。
在Python 3中,map()
返回一个懒惰计算的迭代器。您的任何一个示例都不会实际运行bar
到foo
的所有元素。您将需要迭代该迭代器。最简单的方法是将其转换为列表:
list(map(foo, bar))
答案 1 :(得分:1)
map
返回一个新列表,并不会更改您输入函数的列表。因此,用法是:
def foo(x): #sample function
return x * 2
bar = [1, 2, 3, 4, 5]
newBar = map(foo, bar)
在翻译中:
>>> print bar
[1, 2, 3, 4, 5]
>>> print newBar
[2, 4, 6, 8, 10]
注意:这是python 2.x
答案 2 :(得分:1)
在Python 2 map()
中返回一个新列表。在Python 3中,它返回一个迭代器。您可以将其转换为包含以下内容的列表:
new_list = list(map(foo, bar))
顾名思义,迭代器的一个常见用法是迭代它:
for x in map(foo, bar):
# do something with x
这会一次生成一个值,而不会将所有值都放在内存中,因为创建列表会。
此外,您可以通过迭代器执行单个步骤:
my_iter = map(foo, bar)
first_value = next(my_iter)
second_value = next(my_iter)
现在与其他人合作:
for x in map(foo, bar):
# x starts from the third value
这在Python 3中很常见。zip
和enumerate
也返回迭代器。这通常被称为惰性评估,因为值只在真正需要时生成。