Python列表差异

时间:2012-02-17 21:37:51

标签: python list

我正在尝试查找列表A中的所有元素,而不是列表B.

我认为像newList = list(set(a) & !set(b))newList = list(set(a) & (not set(b)))之类的东西会起作用,但事实并非如此。

如果有更好的方法来实现我想要做的事情而不是这个?

newList = []
for item in a:
    if item not in b:
        newList.append(item)

同样重要的是,它需要在Python 2.6中完成

4 个答案:

答案 0 :(得分:15)

您正在寻找set difference

newList = list(set(a).difference(b))

或者,使用减号运算符:

list(set(a) - set(b))

答案 1 :(得分:10)

你试过吗

list(set(a) - set(b))

以下是所有Python set operations

的列表

但这会不必要地为b创建一个新集。正如@phihag所提到的,difference方法会阻止这种情况。

答案 2 :(得分:1)

如果您关心维持秩序:

def list_difference(a, b):
    # returns new list of items in a that are not in b
    b = set(b)
    return [x for x in a if x not in b]

答案 3 :(得分:1)

>>> list1 = [1,2,3,4,5]
>>> list2 = [4,5,6,7,8]
>>> print list(set(list1)-set(list2))
[1, 2, 3]