'int'对象不能迭代列表列表

时间:2014-02-14 02:32:45

标签: python list iteration

我遇到了一个我无法解释的错误。这是代码:

board = [[1, 2, 3],[1, 2, 3],[1, 2, 3]]
col = 0
col_nums = []
for rows in board:
    col_nums += rows[col]

这使'int'对象不是可迭代的错误。 这虽然有效:

for rows in board:
    print(rows[col])

我想以col_nums = [1, 1, 1]结尾。它似乎不是在迭代任何整数,只是rows,这是一个列表。我认为这可能与+=有关。

3 个答案:

答案 0 :(得分:3)

当您撰写col_nums += rows[col]时,您尝试将int添加到list。这是一种类型不匹配。尝试其中一种替代方案。

  1. 使用append将单个项目添加到列表中。

    for rows in board:
        col_nums.append(rows[col])
    
  2. 您可以将list添加到另一个list

    for rows in board:
        col_nums += [rows[col]]
    
  3. 通过调用extend替换整个循环,一次添加所有项目。

    col_nums.extend(rows[col] for rows in board)
    
  4. 使用列表理解一举创建列表。

    col_nums = [rows[col] for rows in board]
    

答案 1 :(得分:3)

board = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

col = 0

col_nums = list(zip(*board)[col])
# [1, 1, 1]

答案 2 :(得分:1)

您的代码存在的问题是rows[col]的类型为int,而col_nums是一个列表。您可以像这样检查

for rows in board:
    print(type(col_nums), type(rows[col]))

将打印

(<type 'list'>, <type 'int'>)

您可以通过使用[]将int元素转换为列表来解决此问题,就像这样

col_nums += [rows[col]]

但是,如果您只想获得所有子列表的第一个元素,那么最佳和惯用的方法是使用operator.itemgetter

from operator import itemgetter
get_first_element = itemgetter(0)
col_nums = map(get_first_element, board)

现在,col_nums将是

[1, 1, 1]