Python 错误:列表索引必须是整数或切片,而不是元组

Python Error: list indices must be integers or slices, not tuple

提问人:Krish Arora 提问时间:7/23/2021 最后编辑:marc_sKrish Arora 更新时间:7/24/2021 访问量:7341

问:

def openMap(uArr, oArr, i):
    y = int(input("Row Number"))
    x = int(input("Column Number"))
    uArr[y,x] = oArr[y,x]
    printMap(uArr)
    if oArr[y,x] == "X":
        return 0
    else:
        return 1

uArr用户数组和原始数组。oArr

我收到此错误:

列表索引必须是整数或切片,而不是元组

有人可以帮忙调试这个吗?

python 数组 语法错误

评论

1赞 7/23/2021
也许你的意思是你不能传递 2 个数字来索引列表if oArr[y][x] == "X":

答:

0赞 enzo 7/23/2021 #1

在普通的 Python 多维列表中,您不能以 .请改用 .uArr[y, x]uArr[y][x]

评论

0赞 Krish Arora 7/23/2021
是的,在发布此内容后意识到了这一点,但仍然显示此错误
0赞 enzo 7/23/2021
请使用更新后的代码编辑您的问题。您是否替换了所有事件?
0赞 user15801675 7/23/2021 #2

也许你的意思是?不能传递 2 个数字来索引列表。if oArr[y][x] == "X":

通过传递它意味着列表索引需要一个整数。 您应该执行以下操作:[y,x]oArr[(y,x)]

if oArr[y][x] == "X":
0赞 hc_dev 7/24/2021 #3

错误消息表示 Python 中的常见语法错误。

索引时的语法错误

列表索引必须是整数或切片,而不是元组

这是由于在索引列表(或数组)时使用了错误的语法导致的。您的代码用作索引的内容被解释为元组,如 。x,y(x,y)

正确的是单个整数,例如或或切片,例如获得第二个到第三个元素。array[1]array[x]array[1:2]

请参阅文章 TypeError:列表索引必须是整数或切片,而不是 str

任何多维数组或列表中的索引都必须添加到单独的括号中。因此,索引立方体或 3D 数组中的单个元素,而您的二维数组将只使用类似 .[x][y][z][x][y]

热修复

要修复它,只需将 all 替换为 .[y,x][y][x]

def openMap(uArr, oArr, i):
    y = int(input("Row Number"))
    x = int(input("Column Number"))  # fixed a typo

    uArr[y][x] = oArr[y][x]
    printMap(uArr)
    
    if oArr[y][x] == "X":
        return 0
    else:
        return 1

额外提示:验证用户输入以避免越界错误

如果用户输入 或 ?您的数组或列表是否允许负索引或大小那么大?-1999999999999

您应该在检查之前进行检查,然后要求输入正确的信息。

    last_row = len(oArr)-1  # last index because zero-based
    y = last_row + 1  # initially out-of-bounds to enter the loop
    while not 0 <= y <= last_row:
        y = int(input("Row Number ({}..{}): ".format(0, last_row)))
    
    last_col = len(oArr[0])-1  # suppose it's quadratic = all rows have same length
    x = last_col + 1  # initially out-of-bounds to enter the loop
    while not 0 <= x <= last_col:
        x = int(input("Column Number ({}..{}):".format(0, last_col)))

注意:从技术上讲,负索引 like 将指向最后一个元素、最后一个元素之前的元素,依此类推。-1-2

另请参阅相关问题: