AttributeError: 'NoneType' object has no attribute 'remove' issue

AttributeError: 'NoneType' object has no attribute 'remove' issue

我想从列表中删除某些值,如果它们是指定的其他列表中的元素,如下所示。理想情况下,这将 return list2 = ["e","f","g"],但它 return 是上述错误,因为一旦删除其中一个元素,list1 就会变成 None 类型变量...

list1 = ["a","b","c", "d", "e", "f", "g"]

list2 = ["a","b","c","d"]

for x in list1:
    if x in list2:
       list1 = list1.remove(x)

print(list1)

方法list.remove()执行到位。所以而不是:

list1 = list1.remove(x)

应该是这样的:

list1.remove(x)

完整代码

完整的工作代码应如下所示。

list1 = ["a", "b", "c", "d", "e", "f", "g"]
list2 = ["a", "b", "c", "d"]

temp = list1.copy()

for x in list1:
    if x in list2:
       temp.remove(x)

print(temp)

更多解释

因为list.remove()是原地执行的,所以return什么都没有,换句话说,returns None.


使用列表理解的更简单方法

正如 CrazyChucky 指出的那样,在迭代时从列表中删除项目不是一件好事。在列表中添加或删除项目之前,您必须先制作列表的副本。或者您可以选择另一个选项,即改用列表理解。

list1 = ["a", "b", "c", "d", "e", "f", "g"]
list2 = ["a", "b", "c", "d"]

print([i for i in list1 if i not in list2])