Python嵌套列表赋值报错:TypeError: list indices must be integers
问题原因及解决方法
一、TypeError 原因
你执行map[new_list] = "X"报错的核心原因是:Python的列表索引只能是整数或切片对象,不能直接用另一个列表(比如new_list)作为索引。嵌套列表的正确索引方式是外层列表[行索引][列索引],而非直接传入包含行和列的列表。
二、索引越界原因
出现索引越界通常有两个情况:
- 输入的两位数对应的行/列数字,超过了网格实际的行/列数(比如网格是3行3列,输入
45,行数字4超出了0-2的有效索引范围); - 未处理“输入数字从1开始,而Python列表索引从0开始”的差异(比如输入
11想定位第一行第一列,但直接转成索引1的话,会超出3行网格的0-2索引范围)。
三、解决步骤(无循环/函数版本)
1. 明确网格结构
假设初始藏宝图是3x3的嵌套列表:
treasure_map = [ ["O", "O", "O"], ["O", "O", "O"], ["O", "O", "O"] ]
2. 正确处理输入并转换索引
拆分输入的两位数,将“1开始”的位置转换为Python的“0开始”索引:
# 获取用户输入的两位数 position = input("请输入两位数定位:") # 拆分字符并转成索引(减1适配0开始的规则) row_idx = int(position[0]) - 1 col_idx = int(position[1]) - 1
3. 安全替换对应位置
先检查索引合法性,避免越界,再替换元素:
# 获取网格的总行数和总列数 total_rows = len(treasure_map) total_cols = len(treasure_map[0]) # 假设每行长度一致 # 验证索引是否在有效范围内 if 0 <= row_idx < total_rows and 0 <= col_idx < total_cols: treasure_map[row_idx][col_idx] = "X" else: print("输入的位置超出藏宝图范围,请重新输入!")
4. 查看结果
如果不想用循环,可逐行打印网格:
print(treasure_map[0]) print(treasure_map[1]) print(treasure_map[2])
内容的提问来源于stack exchange,提问作者Feeko
相关产品推荐
相关产品推荐

