Python 如果变量在列表B中,请删除列表A中的变量

Python 如果变量在列表B中,请删除列表A中的变量,python,list,Python,List,就像标题中的状态一样,如果一个列表中的变量恰好位于另一个列表中,我希望删除它们。我尝试了各种技术,但似乎无法获得正确的代码。有人能帮忙吗?有几种方法 # just make a new list [i for i in a if i not in b] # use sets list(set(a).difference(set(b))) 我知道了,但是有没有一种更简单的方法来编写代码 a = [0,1,2,3,4,5,6,7,8] b = [0,5,8] for i in a: if

就像标题中的状态一样,如果一个列表中的变量恰好位于另一个列表中,我希望删除它们。我尝试了各种技术,但似乎无法获得正确的代码。有人能帮忙吗?

有几种方法

# just make a new list
[i for i in a if i not in b]

# use sets
list(set(a).difference(set(b)))

我知道了,但是有没有一种更简单的方法来编写代码

a = [0,1,2,3,4,5,6,7,8]
b = [0,5,8]
for i in a:
    if i in b:
        a.remove(i)
如果要维持订单,您可以使用列表理解:

>>> l = [1,2,3,4]
>>> l2 = [1,5,6,3]

>>> [x for x in l if x not in l2]
[2, 4]
如果原始列表中元素的顺序无关紧要,您可以使用
set

>>> list(set(l) - set(l2))
[2, 4]
哈希表用于保持运行时复杂性的线性


如果对列表b进行排序,那么您可以使用哈希表进行二进制搜索,在这种情况下,复杂性将是nlog(n)

try
set
s和
difference\u update
By variable您是指列表中变量的值还是变量本身?您不应该在迭代列表时更改列表的大小。谢谢,这背后的原因是什么?拿着你的代码,使用
a=[0,0,1,2,3,4,5,6,7,8]
a=[0,0,0,1,2,3,4,5,6,7,8]
。想想你对
a
的期望结果,然后看看你得到了什么。问题在于指向列表的内部指针。删除元素时,指针不会移动,您可能会跳过一些剩余的元素。(其他示例:
a=[0,5,8]
)。
def returnNewList(a,b):
    h = {}
    for e in b:
        h[e] = True
    return [e for e in a if e not in h]