如何使用集获得两个列表之间的差异

时间:2018-11-05 22:28:32

标签: python list set

为什么这样做:

a = ["one", "two","three"]
b = ["one","three"]
c = set(a)-set(b)
d = set(b)-set(a)
e = []
e.append(d)
e.append(c)

这不是:

example = set(set([a])-set([b])) + set(set([b])-set([a]))

在索引数量方面,我知道第一种情况会产生与第二种情况不同的结果。

如何在不使用联合或符号项目的情况下使用set制作第二个版本。

所需的输出:做一个最终列表,您将在其中获得:

output = ["two"]

仅使用set函数就可以找到不常见的元素,并使其成为一个衬里。

2 个答案:

答案 0 :(得分:0)

这是一个愚蠢的错误:

>>> a=["one", "two", "three"]
>>> set(a)
set(['three', 'two', 'one'])
>>> set([a])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

请注意两次调用set()之间的区别:一个传递列表,另一个传递包含子列表的列表并将其传递。

(一旦解决此问题,您将不得不解决以下问题:您不能添加设置:

  

不使用联合

+运算符未在集合上定义,但如果是,则可能是联合运算符。)

答案 1 :(得分:0)

一个班轮:

list(set(a) - set(b)) # ["two"]