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

时间:2017-01-16 21:28:08

标签: python list

与标题状态一样,我想删除一个列表中的变量,如果它们碰巧在另一个列表中。我尝试了各种技术,但似乎无法获得正确的代码。任何人都可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

如果您想维护订单,可以使用 list comprehension

>>> 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]

答案 1 :(得分:1)

def returnNewList(a,b):
    h = {}
    for e in b:
        h[e] = True
    return [e for e in a if e not in h]

哈希表用于保持运行时复杂度的线性。

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

答案 2 :(得分:0)

有几种方法

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

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

答案 3 :(得分:-1)

我想出来了,但是编写这段代码有一个更短的方法吗?

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)