执行以下示例代码以从列表中删除元素:
l = ['A', 'B', 'C', 'D']
for x in l:
print(x, l)
if x == 'A' or x == 'B':
l.remove(x)
print(l)
Python 2.x和Python 3.x中的输出是:
$ python3 test.py
A ['A', 'B', 'C', 'D']
C ['B', 'C', 'D']
D ['B', 'C', 'D']
['B', 'C', 'D']
预期输出应为:
['C', 'D']
为什么Python会以这种方式运行? 从列表中删除元素最安全的方法是什么?
答案 0 :(得分:1)
问题在于,当您删除了A',' B'成为你的第一个元素,我是"指向"在第二个,这是C.因此,检查是为C启动的,你跳过检查' B'
要做你想做的事,你想写下以下内容:
a = ['A', 'B', 'C', 'D']
i = 0
while i < len(a):
if a[i] == 'A' or a[i] == 'B':
del a[i]
else:
i += 1
print(a)
这样,如果删除循环当前正在查看的元素,则会查看具有相同编号的元素,这是删除元素和元素移位后要查看的正确元素。即:
a b c d
^
(deleted)
a c d
^
另一方面,如果您不删除当前元素,则只需进入下一个元素
这不是删除所有&#39; A&#39;的最佳方法。或者&#39; B&#39;虽然在Python中