【问题标题】:list indices must be integers or slices, not list from 2D array python列表索引必须是整数或切片,而不是二维数组 python 中的列表
【发布时间】:2018-05-19 17:19:14
【问题描述】:

我从 python 得到这个错误:

TypeError: list indices must be integers or slices, not list

使用此代码时:

a1, a2, a3, a4, a5, a6, a7, a8, b1, b2, b3, b4, b5, b6, b7, b8 = "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "g1", "g2", "g3", "g4", "g5", "g6", "g7", "g8", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8" 
bord = [[a1, a2, a3, a4, a5, a6, a7, a8], [b1, b2, b3, b4, b5, b6, b7, b8], [c1, c2, c3, c4, c5, c6, c7, c8], [d1, d2, d3, d4, d5, d6, d7, d8], [e1, e2, e3, e4, e5, e6, e7, e8], [f1, f2, f3, f4, f5, f6, f7, f8], [g1, g2, g3, g4, g5, g6, g7, g8], [h1, h2, h3, h4, h5, h6, h7, h8]]


for y in bord:
    for x in bord[y]:
        print(bord[y][x])

所以我创建了一个 8 x 8 棋盘(2D 列表),其位置名称类似于国际象棋。 我想为棋盘的每个方格执行一段代码。

第一个 for 循环将一次选择 1 行(因此 y 作为 y 轴) 然后第二个 for 循环将一次选择 1 列(因此 x 作为 x 轴)

为了测试,我刚刚打印了 2D 列表的位置:

print(bord[y][x])

【问题讨论】:

  • 您似乎明白第一个循环遍历子列表:“第一个 for 循环将一次选择 1 行”,那么您认为bord[y] 在@ 时会做什么987654325@ 是子列表?你想要像for row in bord: for x in row: print(x) 这样的东西。注意,这不是二维数组,这是一个列表。
  • 或者,使用你的变量名:for y in bord: for x in y: print(x)
  • @juanpa.arrivillaga 谢谢先生!我对python很陌生,但你帮了我很多:)

标签: python list for-loop multidimensional-array error-handling


【解决方案1】:
for y in bord:
    for x in bord[y]:
        print(bord[y][x])

这是错误的,上面的正确做法是这样的:

for y in bord:
    for x in y:
        print(x)

这是因为for x in arr遍历数组并将元素保存在变量x中,如果你想做bord[y][x]的样式,请执行以下操作:

for y in range(len(bord)):
    for x in range(len(bord[y])):
        print(bord[y][x])

此实例中的range() 函数从 0..len(board) - 1 创建一个数组,因此假设 bod 的大小为 5 个元素,我们将使用 range(5)。这与for x in [0, 1, 2, 3, 4] 相同。因此它会遍历该数组并将当前元素保存在变量 x 中。

所以只是总结一下。

您可以:

for y in bord:
    for x in y:
        print(x)

for y in range(len(bord)):
    for x in range(len(bord[y])):
        print(bord[y][x])

您可以使用任何一种,无论您喜欢哪一种。使用其中一个可能是有原因的,但我不知道,如果有人想编辑这个以提供这个原因,请这样做。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2017-10-01
    相关资源
    最近更新 更多