list.remove()的问题

这个方程是用来去掉alist中的element
比如([1,2,3,4,5], 1)就输出[2,3,4,5]
为什么([2,2,2],2)的输出是[2]而不是一个空的列表呢?请问哪里有问题

img

因为你在遍历列表的同时,列表因为remove删除元素,长度发生了变化,比如列表[1,2,3,4], 你在遍历到2的时候,把2删了,本来应该遍历3的,因为列表长度变化了,跳过了3,下一个元素变成了4。所以你的例子里,第二个2被跳过了。
一般建议遍历列表的副本a_list[:],这样就不会有这样的问题了:下面就返回空列表

def remove_all(a_list, element):
    for ele in a_list[:]:
        if ele==element:
            a_list.remove(ele)
    return a_list

print(remove_all([2,2,2],2))