即使列表A中的每个项目都没有返回空列表,即使A == B,也将从列表A中删除所有项目

时间:2018-12-15 18:21:50

标签: python jupyter-notebook

我在jupiter-notebook中编写了以下python代码:

x=['b','x','a']
y=['b','x','a']
for i in x:
    if i in y:
        x.remove(i)
print (x)

我期望有一个空列表,但输出为['x']。 代码有什么问题?

4 个答案:

答案 0 :(得分:0)

之所以会出现这种现象,是因为您要在列表x上进行迭代时删除它们。

要获得期望的结果(一个空列表),您应该使用列表理解:

x = [i for i in x if i not in y]
print(x) # prints []

在同一主题上检查这个StackOverflow问题:How to remove items from a list while iterating?

答案 1 :(得分:0)

之所以发生该错误,是因为您在迭代时要删除列表x中的一个元素。

答案 2 :(得分:0)

您不必迭代。试试这个:

set(x)-set(y)

答案 3 :(得分:0)

在这里您可以使用 filter 函数,例如

x = list(filter(lambda element: element not in y, x))

请参见http://book.pythontips.com/en/latest/map_filter.html#filter