修复运行中给出的错误的最佳方法是什么?我也有点理解,列表在迭代时不能改变,但它看起来仍然有点抽象。
myList = ["A", "B", "C", "D", "E", "F", "G", ]
for i in range(len(myList)):
if i == 2:
del (myList[4])
print(i, myList[i])
--------------------------运行-------------------- -----------------------------
"C:\Python36\python.exe"
Traceback (most recent call last):
0 A
File "C:/Users/reading.py", line 10, in <module>
1 B
2 C
print(i, myList[i])
3 D
4 F
IndexError: list index out of range
5 G
Process finished with exit code 1
答案 0 :(得分:1)
相反,Python中的列表可以更改(它是可变的),这就是你刚刚在这里做的:
del (myList[4])
在循环开始时,len(myList)
会解析为6
。在最后一个循环中,i = 6
,
print(i, myList[i])
基本上是
print(i, myList[6])
但是,由于您将其缩短为5,因此Python会引发超出范围的错误。
答案 1 :(得分:0)
这是list.pop
的用途!
myList = ["A", "B", "C", "D", "E", "F", "G"]
并删除第二个元素:
myList.pop(2)
会将list
修改为:
['A', 'B', 'D', 'E', 'F', 'G']
正如评论中所指出的那样,修改list
你iterating
过来绝不是一个好主意。如果必须进行更复杂但与此类似的事情,您可以首先使用list
制作myList[:]
的副本,然后重复更改copy
。但是对于这种情况,list.pop
绝对是正确的选择。
答案 2 :(得分:0)
如何:
myList = ["A", "B", "C", "D", "E", "F", "G"]
做的:
for i in range(len(myList)):
if i == 2:
del (myList[4])
try:
print(i, myList[i])
except IndexError:
None
`
答案 3 :(得分:0)
试试这个:
myList = ["A", "B", "C", "D", "E", "F", "G"]
for i in range(len(myList)-4):
if i == 2:
del myList[4]
print(i, myList[i])
0 A
1 B
2 C
>>> myList
['A', 'B', 'C', 'D', 'F', 'G']