获取列表中不重复的项
有两个列表,第二个列表的内容和第一个列表一样,但多了一些其他的东西:
a = [1,2,3]
b = [1,2,3,4,5]
我想得到第三个列表,里面只包含新的项目(也就是那些没有重复的):
c = [4,5]
我现在的解决方案是:
>>> c = []
>>> for i in ab:
... if ab.count(i) == 1:
... c.append(i)
>>> c
[4, 5]
有没有比这个更符合Python风格的方法呢?
谢谢大家!
7 个回答
4
在b中有但在a中没有的项目,如果你需要保留b中的顺序或重复项:
>>> a = [1, 2, 3]
>>> b = [1, 2, 3, 4, 4, 5]
>>> a_set = set(a)
>>> [x for x in b if x not in a_set]
[4, 4, 5]
在b中有但在a中没有的项目,不保留顺序,也不保留b中的重复项:
>>> list(set(b) - set(a))
[4, 5]
8
如果顺序不重要,并且你可以忽略和中的重复项,我建议直接使用集合(sets):
>>> set(b) - set(a)
set([4, 5])
集合是可遍历的,所以大多数情况下你不需要特意把它们转换回列表。如果真的需要这样做,可以用下面的方式:
>>> list(set(b) - set(a))
[4, 5]
12
至少可以使用列表推导式:
[x for x in a + b if (a + b).count(x) == 1]
否则可以使用集合类:
list(set(a).symmetric_difference(set(b)))
还有一种更简洁的写法:
list(set(a) ^ set(b))