拿两个列表,第二个与第一个相同的项目加上更多:
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)
如果顺序并不重要,你可以在忽略重复a和b,我会简单地使用集:
>>> 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)