python-3.x - 为什么使用 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])]
>>>
解决方案
map
(就像一个生成器表达式)是惰性的。它不会迭代列表并评估其功能,直到您强制它这样做,并且您不会强制迭代器在此处运行。
您可以通过将其放在列表中(或从一开始就使用理解)来强制它:
list(map(lambda x: x.rotate(1), res))
list
强制计算返回的map
.
不过,理想情况下,您不应该使用map
它来产生副作用。的目的map
是将一个列表转换为另一个列表。为了清楚起见,只需for
在此处使用您的完整循环。
推荐阅读
- javascript - 如何检查值是否已包含在数组javascript中
- reactjs - Redux 设计问题:可以/应该将经常更改的状态(光标索引)保留在存储之外吗?如果是这样,替代方案?
- python - 我是 python 新手,第一个 if 语句出现错误
- html - Z-index 不适用于伪元素 ::after
- arrays - Powershell将范围作为数组传递?
- c# - 在服务错误 C# 上回滚 MVC 中的更改
- r - R:如何使用函数生成部分函数参数
- ruby - 将零值传递给自定义方法
- javascript - CSS/Javascript 效果不显示
- r - 使用 R 中的 pip2d 函数,我们如何知道顶点的正确“顺序”?