【问题标题】:TypeError: 'int' object is not iterable while no iteration exists?TypeError:'int'对象在不存在迭代时不可迭代?
【发布时间】:2019-02-06 15:20:28
【问题描述】:

我正在尝试执行 BFS,而 Python 给了我一个 int object not iterable 错误。

部分代码是

visited, queue = set(), collections.deque( ((0, 0), [ (0, 0) ] ) ) 
# tuple: current location,  path
while queue: 
    vertex = queue.popleft()
    i,j=vertex[0]
    if i+1<=dim-1 and (i+1, j) not in visited and X[i+1, j]==0:
        visited.add(( i+1, j) )
        temp=( (i+1, j), vertex[1]+[(i+1, j)])
        if temp[0]==(dim-1, dim-1):
            return True, temp[1]
        queue.append(temp)

在 while 循环下,我正在做任何其他迭代!

【问题讨论】:

  • i, j = &lt;expression&gt; 暗示&lt;expression&gt; 是可迭代的并且恰好有两个元素。而在你的情况下,表达式 (vertex[0]) 产生一个整数,它是不可迭代的。
  • 所以,您实际上在您发布的块中有(至少)两次迭代,即使它们并不明显。
  • @Dunes 我很确定这就是答案,你应该发布它。
  • @Jared Smith My visited 这里是一个包含 (int, int) 形式的元组的集合

标签: python python-3.x list set


【解决方案1】:

i, j = &lt;expression&gt; 意味着它是可迭代的并且恰好有两个元素。而在您的情况下,表达式 (vertex[0]) 产生一个整数,这是不可迭代的。

语句:i, j = vertex[0]大致相当于:

iterator = iter(vertex[0])
i = next(iterator) # this is iteration, but outside of a loop
j = next(iterator)
try:
    next(iterator)
except StopIteration:
    pass
else:
    raise ValueError

您的代码应该是

i = vertex[0]
j = vertex[1]

i, j = vertex

【讨论】:

  • 我不知道怎么做,但它不应该是这样的。我的queue 里面的东西是(元组,列表)形式的元组,因此vertex[0] 应该给我第一个内部元组
  • 尝试在此语句之前打印出vertex,看看它是什么。您管理队列的方式有问题。
  • 看起来您对队列的初始构造是错误的。它创建一个双元素队列,而不是一个具有元组和列表的元组的单元素队列。
  • 我在终端上测试过。确实,首先popleft() 只给了我(0, 0)
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 2023-01-22
  • 2018-09-29
  • 2020-02-26
  • 2015-04-06
  • 2013-10-31
  • 2018-03-14
相关资源
最近更新 更多