如何使用集合理解在集合中找到不在另一个集合中的单个元素

How to find a single element in a set that isn't in another using set comprehension

我有两组,set1 和 set2...除了一个元素外,两组中几乎所有元素都相同。

支持代码如下:

set1 = {'dog', 'cat', 'turtle', 'monkey'}
set2 = {'dog', 'cat', 'turtle', 'gorilla'}

我正在尝试使用集合理解将每个集合的唯一元素放入其自己的变量中。

set1Unique = 'monkey'
set2Unique = 'gorilla'

我已经通过执行以下操作使其工作,但这不是必需的,使用集合理解是。

    set1UniqueElements = set1 - set2
    set1Unique = list(set1UniqueElements)[0]

唯一项是集合中不在另一个集合中的元素。因此:

>>> cat = 'cat'
>>> set1 = {'dog', cat, 'turtle', 'monkey'}
>>> set2 = {'dog', 'cat', 'turtle', 'gorilla'}
>>> {e for e in set2 if e not in set1}
{'gorilla'}
>>> {e for e in set1 if e not in set2}
{'monkey'}

要从集合中获取任意元素(将 single-element 集合单独转换为单个元素),您可以使用 set.pop():

>>> {e for e in set1 if e not in set2}.pop()
'monkey'

如果您确定 set2 中至少有一个元素不在 set1 中,并且您只查找第一个这样的元素:

next(e for e in set2 if e not in set1)

一旦找到 set2 中不在 set1 中的任何元素,此代码就会停止。

由于只有一个唯一元素,可以使用打包直接访问元素:

[set1Unique] = set1 - set2
[set2Unique] = set2 - set1

我会用这个:

ex = set1 ^ set2
set1unique = ex & set1
set2unique = ex & set2

print(set1unique)
print(set2unique)

您可以在 setNunique 公式中计算 ex。它节省了一行,但是你计算了两次 ex。