提问人:Krish Arora 提问时间:7/23/2021 最后编辑:marc_sKrish Arora 更新时间:7/24/2021 访问量:7341
Python 错误:列表索引必须是整数或切片,而不是元组
Python Error: list indices must be integers or slices, not tuple
问:
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
我收到此错误:
列表索引必须是整数或切片,而不是元组
有人可以帮忙调试这个吗?
答:
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
额外提示:验证用户输入以避免越界错误
如果用户输入 或 ?您的数组或列表是否允许负索引或大小那么大?-1
999999999999
您应该在检查之前进行检查,然后要求输入正确的信息。
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
另请参阅相关问题:
评论
if oArr[y][x] == "X":