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