获取列表中不重复的项

2 投票
7 回答
2972 浏览
提问于 2025-04-15 12:35

有两个列表,第二个列表的内容和第一个列表一样,但多了一些其他的东西:

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]
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))

撰写回答