获取列表中不重复的项目

nab*_*und 2 python

拿两个列表,第二个与第一个相同的项目加上更多:

a = [1,2,3]
b = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

我想得到第三个,只包含新项目(不重复的项目):

c = [4,5]
Run Code Online (Sandbox Code Playgroud)

我现在的解决方案是:

>>> c = []
>>> for i in ab:
...   if ab.count(i) == 1:
...     c.append(i)
>>> c
[4, 5]
Run Code Online (Sandbox Code Playgroud)

有没有比这更pythonic的方式?

Thanx伙计们!

Unc*_*eiv 12

至少使用列表理解:

[x for x in a + b if (a + b).count(x) == 1]
Run Code Online (Sandbox Code Playgroud)

否则使用set类:

list(set(a).symmetric_difference(set(b)))
Run Code Online (Sandbox Code Playgroud)

还有一个更紧凑的形式:

list(set(a) ^ set(b))
Run Code Online (Sandbox Code Playgroud)


kra*_*oti 8

如果顺序并不重要,你可以在忽略重复ab,我会简单地使用集:

>>> set(b) - set(a)
set([4, 5])
Run Code Online (Sandbox Code Playgroud)

集是可迭代的,因此大多数情况下您不需要将它们显式转换回列表.如果必须,这样做:

>>> list(set(b) - set(a))
[4, 5]
Run Code Online (Sandbox Code Playgroud)