首页 > 解决方案 > 为什么使用 deque 时不调用 Python 3 map 函数?

问题描述

当我使用 deque 作为它的输入时,不会调用 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 循环,它会被旋转。

>>> 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])]
>>>

标签: python-3.xdeque

解决方案


map(就像一个生成器表达式)是惰性的。它不会迭代列表并评估其功能,直到您强制它这样做,并且您不会强制迭代器在此处运行。

您可以通过将其放在列表中(或从一开始就使用理解)来强制它:

list(map(lambda x: x.rotate(1), res))

list强制计算返回的map.

不过,理想情况下,您不应该使用map它来产生副作用。的目的map是将一个列表转换为另一个列表。为了清楚起见,只需for在此处使用您的完整循环。


推荐阅读