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])
我想从列表中删除某些值,如果它们是指定的其他列表中的元素,如下所示。理想情况下,这将 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])