由于 TypeError,无法将嵌套列表值替换为 X:列表索引必须是整数或切片,而不是列表错误 [duplicate]

Cannot replace nested list value to X due to TypeError: list indices must be integers or slices, not list error [duplicate]

提问人:Feeko 提问时间:8/31/2023 最后编辑:Scott HunterFeeko 更新时间:8/31/2023 访问量:57

问:

我正在尝试做一个练习,学习嵌套列表的 Python,我的工作方式是你有一个网格,然后根据你输入的内容,它会用“X”替换该位置。您还需要在输入 2 位数字时执行此操作。我能够将输入转换为列表,并且能够确保它们也是整数。

# 🚨 Don't change the code below 👇
row1 = ["⬜️","️⬜️","️⬜️"]
row2 = ["⬜️","⬜️","️⬜️"]
row3 = ["⬜️️","⬜️️","⬜️️"]
map = [row1, row2, row3]
print(f"{row1}\n{row2}\n{row3}")
position = input("Where do you want to put the treasure? ")
# 🚨 Don't change the code above 👆

#Write your code below this row 👇


#Take the 2-digit number and split into the column and row numbers
#Also now integers to find the indexes
column_num = int(position[0])
row_num = int(position[1])

#Take the 2 numbers, and use to make where to mark the X
new_list = [column_num, row_num]
new_column = new_list[0]
new_row = new_list[1]
x = [new_column] + [new_row]
print(new_list)
print(x)

# Replace the new_list list, which have the indexes, into X
map[new_list] = "X"

#Write your code above this row 👆

# 🚨 Don't change the code below 👇
print(f"{row1}\n{row2}\n{row3}")

我收到此错误:

Traceback (most recent call last):
  File "C:\Users\*******\IdeaProjects\_100DaysOfCodev2\.idea\Day 4 - Beginner - Randomisation and Python Lists\6- [Exercise] - Treasure Map.py", line 27, in <module>
    map[new_list] = "X"
TypeError: list indices must be integers or slices, not list

我试图将列表更改为“int”,但随后它告诉我不是元组而不是列表。

有人有什么想法吗?我想了解我在这里错过了什么,而不是回去玩解决方案。

我试图将新列表的值分开,以便它们是整数,但我需要它们是一组索引,但它不起作用,因为它再次成为列表。我尝试从“地图”嵌套列表中召唤不同的东西,但我收到索引错误,它也超出了索引范围。此外,我们还没有在“for、in”或定义函数中。回溯(最近一次调用最后一次): 文件“C:\Users\e792977\IdeaProjects_100DaysOfCodev2.idea\Day 4 - Beginner - Randomisation and Python Lists\6- [Exercise] - Treasure Map.py”,第 27 行,在 地图[new_list] = “X” TypeError:列表索引必须是整数或切片,而不是列表

python 列表 类型错误 嵌套列表 索引错误

评论

1赞 Suraj Shourie 8/31/2023
仔细查看错误,您的变量是一个列表(duh),您可以使用另一个列表索引您的其他列表。TypeError: list indices must be integers or slices, not listnew_listmap
0赞 Suraj Shourie 8/31/2023
此外,您还使用一个名为 的变量覆盖了内置函数。如果您尝试使用该函数,请重命名您的变量mapmap
0赞 JonSG 8/31/2023
鉴于代码中的注释,我认为这是问题的错,而不是学生的错。
0赞 Karl Knechtel 8/31/2023
仔细考虑代码的逻辑。如果我写了然后,这应该有效吗?结果应该是什么?你为什么这么认为?(提示:地图的元素是什么?他们有什么指数?(提示:请注意,如何完全允许编写类似的东西并与之合作?这是否告诉您有关嵌套列表在 Python 中如何工作的信息?x = [1, 1]map[x][1, 2, [3, 4], 5]
0赞 Karl Knechtel 8/31/2023
(我敢肯定有一个更好的副本,但它是我能找到的。这个问题很常见。

答:

1赞 Scott Hunter 8/31/2023 #1

您需要明确标识 2 个索引:

    map[new_list[0]][new_list[1]] = "X"

或者在当前解决方案的上下文中,例如:

# 🚨 Don't change the code below 👇
row1 = ["⬜️","️⬜️","️⬜️"]
row2 = ["⬜️","⬜️","️⬜️"]
row3 = ["⬜️️","⬜️️","⬜️️"]
map = [row1, row2, row3]
print(f"{row1}\n{row2}\n{row3}")
position = input("Where do you want to put the treasure? ")
# 🚨 Don't change the code above 👆

#Write your code below this row 👇
x_index = int(position[0]) - 1      ## assume that users will use 1 indexing
y_index = int(position[1]) - 1
map[y_index][x_index] = "X"
#Write your code above this row 👆

# 🚨 Don't change the code below 👇
print(f"{row1}\n{row2}\n{row3}")

注意:

正如其他人所指出的那样,对于变量名称来说是一个糟糕的选择,因为它会隐藏 python 函数 .您可以在此处找到此类的完整列表: 内置函数mapmap()

其次,python列表是,如果我们的用户没有预料到可能会有混淆。此代码获取他们请求的行和列,并将其转换为假设他们期望成为“第一”行。0-indexed0-indexedrow 1

最后,我希望当被要求提供坐标时,我按以下顺序():xy

  • x(行偏移量)
  • y(列偏移量)

但是,每个“行”的数据都是 并且给定行中的每个数据单元格都是 因此,当我们设置“X”时,我们将通过而不是直觉索引到我们的数据中。i-th y-offsetj-th x-offsetmap[y_index][x_index]map[x_index][y_index]

评论

0赞 JonSG 8/31/2023
介意我详细说明一下吗?
0赞 Scott Hunter 8/31/2023
@JonSG:把自己打倒。
0赞 JonSG 8/31/2023
如果您觉得这没有增加价值或不符合您原始帖子的精神,请随时回复。我不会介意的。
0赞 Feeko 8/31/2023
当我这样做时,它给了我这个错误 - x = map[new_list[0][new_list[1]]] TypeError: 'int' object is not subscriptable 我从顶部更改了 ints 并创建了一个新变量,它将列表转换为 'int'。它给了我他的错误: new_list_int = int(new_list) TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“列表” 我陷入了循环。我把它改成'int',它不能是'int',我不改它,它不能是一个列表。
0赞 Feeko 8/31/2023
不行。它比需要的多一个支架。此外,将所有内容放在另一组括号中会使所有内容超出索引范围,并带有 IndexError。