我正在尝试制作一个程序,该程序将读取名称和数字的文本文件,并使其成为具有名称和数字的2d数组,然后从数组中删除项目,如果数字为1。然而,我写的代码访问索引在2d数组不工作,并抛出错误"IndexError:列表索引超出范围"。这是不能工作的代码块:
for i in range(x):
list2[i][1] = int(list2[i][1])
if int(list2[i][1]) == 1:
list2.pop(i)
这是回溯:
File "/Users/cat/PycharmProjects/myCS106/Names.py", line 16, in updateNames
list2[i][1] = int(list2[i][1])
IndexError: list index out of range
下面是list2的一个示例:
[["John Doe","1"],["Jane Smith","0"],["Firstname Lastname","1"]]
我做错了什么,我如何正确访问数组中项目的第二部分(在本例中是数字)?
如果你只是想从列表中删除一些元素,你可以从末尾到开始迭代它,这将允许你删除项目而不会导致IndexError
:
list2 = [["John Doe","1"],["Jane Smith","0"],["Firstname Lastname","1"]]
for i in range(len(list2) - 1, -1, -1):
list2[i][1] = int(list2[i][1])
if int(list2[i][1]) == 1:
list2.pop(i)
print(list2)
输出:[['Jane Smith', 0]]
当然你可以使用列表推导式来创建一个新的列表:
list2 = [[x[0], int(x[1])] for x in list2 if int(x[1]) != 1]