我遇到了一个我无法解释的错误。这是代码:
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
,这是一个列表。我认为这可能与+=
有关。
答案 0 :(得分:3)
当您撰写col_nums += rows[col]
时,您尝试将int
添加到list
。这是一种类型不匹配。尝试其中一种替代方案。
使用append
将单个项目添加到列表中。
for rows in board:
col_nums.append(rows[col])
您可以将list
添加到另一个list
。
for rows in board:
col_nums += [rows[col]]
通过调用extend
替换整个循环,一次添加所有项目。
col_nums.extend(rows[col] for rows in board)
使用列表理解一举创建列表。
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]