为什么list
和for
在函数生成的值上使用它们时会报告不同的结果?你知道吗
from collections import deque
def neighbours(comp0, cand0):
comp = deque([i for i in comp0])
cand = deque([i for i in cand0])
for i in range(len(cand)):
elem = cand.popleft()
comp.append(elem)
yield comp, cand
comp.pop()
cand.append(elem)
return
>>> n = neighbours([2], [1,4,5])
>>> list(n)
[(deque([2]), deque([1, 4, 5])), (deque([2]), deque([1, 4, 5])), (deque([2]), deque([1, 4, 5]))]
>>> n = neighbours([2], [1,4,5])
>>> for i in n:
... print(i)
...
(deque([2, 1]), deque([4, 5]))
(deque([2, 4]), deque([5, 1]))
(deque([2, 5]), deque([1, 4]))
>>>
迭代时对象会被修改;使用
for
时打印中间结果,打印列表时打印最终结果。你知道吗如果先将结果附加到列表中,则会再次得到与
list()
输出相同的结果:res
中的每个元素都是一个元组,具有两个相同的deque对象:您可以生成每个
deque
的list()
副本,从而创建新的对象:哈维尔已经很好地解释了这个问题的原因。现在,如果希望使用迭代得到相同的结果,可以使用:
相关问题 更多 >
编程相关推荐