使用双端队列作为输入时,不会调用map的参数函数。
如果我只循环并调用旋转功能,它就可以工作。
为什么地图功能后res根本不旋转?
>>> print(res)
[deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3])]
>>> map(lambda x: x.rotate(1), res)
<map object at 0x10a35b7f0>
>>> print(res)
[deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3])]
但是,如果我用于循环,则它会旋转。
>>> for x in res:
... x.rotate(1)
...
>>> print(res)
[deque([3, 4, 5, 1, 2]), deque([3, 4, 5, 1, 2]), deque([3, 4, 5, 1, 2]), deque([3, 4, 5, 1, 2]), deque([3, 4, 5, 1, 2])]
>>>
答案 0 :(得分:0)
map
(类似于生成器表达式)是惰性的。在您强制执行列表之前,它不会迭代列表并评估其功能,也不会强制迭代器在此处运行。
您可以通过将其放入列表(或从一开始就使用理解力)来强制使用它:
list(map(lambda x: x.rotate(1), res))
list
强制评估返回的map
。
但是理想情况下,您不应该使用map
来产生副作用。 map
的目的是将一个列表转换为另一个列表。只需在此处使用完整的for
循环即可。