Skip to main content
 首页 » 编程设计

python之当我不尝试迭代时,“int”对象不可迭代

2025年05月04日17qlqwjy

以下代码尝试创建一张 map ,显示从该 map 上的每个方格到达指定位置所需的最少移动次数。整个功能在很大程度上与问题无关,但我认为我应该在上下文中提供我的问题。我还从集合中导入了双端队列。奇怪的部分出现在第 7 行。我得到 TypeError: 'int' object not iterable。但是语句“distance_from_loc, f_loc = squares_to_check.popleft()”不应该试图迭代任何知识。任何帮助将不胜感激。

    def complex_distance(self, loc): 
        row, col = loc 
        squares_to_check = deque((0, loc)) 
        self.complex_distance_map = zeros((self.height, self.width), int) + 999 
        self.complex_distance_map[row][col] = 0 
        while squares_to_check: 
            distance_from_loc, f_loc = squares_to_check.popleft() 
            distance_from_loc += 1 
            for d in AIM: 
                n_loc = self.destination(f_loc, d) 
                n_row, n_col = n_loc 
                if distance_from_loc < self.complex_distance_map[n_row][n_col] and not self.map[n_row][n_col] == -4: 
                    squares_to_check.append((distance_from_loc, n_loc)) 
                    self.complex_distance_map[n_row][n_col] = distance_from_loc 

请您参考如下方法:

行确实尝试迭代:

>>> a, b = 0 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not iterable 

线

squares_to_check = deque((0, loc)) 

用 0 和 loc 这两个元素初始化双端队列,而不是用单个元素 (0, loc)。使用

squares_to_check = deque([(0, loc)]) 

得到想要的结果。