查找不在两个列表的交集中的元素

Phi*_*lip 5 python

所以我知道如何找到两个列表的交集:

>>> a = [1,2,3,4,5]
>>> b = [1,3,5,6]
>>> list(set(a) & set(b))
[1, 3, 5]
Run Code Online (Sandbox Code Playgroud)

但是找到交叉点中未包含的所有元素的最佳方法是什么.我最初的想法是创建两个列表的联合,然后从联合中删除交集中的所有元素,如下所示:

>>> a = [1,2,3,4,5]
>>> b = [1,3,5,6]
>>> intersection = list(set(a) & set(b))
>>> union = list(set(a) | set(b))
>>> non_intersection = intersection - union
[2, 4, 6]
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?还是有另一种方式?

Gen*_*sev 12

我通常更喜欢捷径:

set(a) ^ set(b)
{2, 4, 6}
Run Code Online (Sandbox Code Playgroud)

  • 嗨,出于兴趣,“^”的想法是什么? (2认同)

ubu*_*ows 7

对称差异?

>>> set(a).symmetric_difference(b)
{2, 4, 6}
Run Code Online (Sandbox Code Playgroud)

  • `symmetric_difference` 接受任何可迭代对象,因此不需要第二次调用 `set`。 (4认同)