从Python中的列表中删除元素

时间:2016-08-22 15:19:26

标签: python list

执行以下示例代码以从列表中删除元素:

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会以这种方式运行? 从列表中删除元素最安全的方法是什么?

1 个答案:

答案 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中