python-3.x - python : Symmetrical Difference Between List of Sets of Strings

标签 python-3.x set set-intersection symmetric-difference

我有一个包含多组字符串的列表,我想找到每个字符串与该组中其他字符串之间的对称差异。

例如,我有以下列表:

targets = [{'B', 'C', 'A'}, {'E', 'C', 'D'}, {'F', 'E', 'D'}]

对于上述,所需的输出是:
[2, 0, 1]

因为在第一个集合中,A 和 B 在任何其他集合中都找不到,对于第二个集合,该集合没有唯一元素,而对于第三个集合,在任何其他集合中都找不到 F。

我想倒退着解决这个问题;找到每个集合的交集并从列表的长度中减去交集的长度,但是 set.intersection(*) 似乎不适用于字符串,所以我被卡住了:
set1 = {'A', 'B', 'C'}
set2 = {'C', 'D', 'E'}
set3 = {'D', 'E', 'F'}

targets = [set1, set2, set3]

>>> set.intersection(*targets)
set()

最佳答案

您遇到的问题是所有三组都没有共享字符串,因此您的 intersection出现空。这不是字符串问题,它对数字或任何您可以放入集合中的东西都一样。

我看到对所有集合进行全局计算,然后使用它来查找每个集合中唯一值的数量的唯一方法是首先计算所有值(使用 collections.Counter ),然后对每个集合计算数量在全局计数中仅出现一次的值。

from collections import Counter

def unique_count(sets):
    count = Counter()
    for s in sets:
        count.update(s)
    return [sum(count[x] == 1 for x in s) for s in sets]

关于python-3.x - python : Symmetrical Difference Between List of Sets of Strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53384697/

相关文章:

python - 在不使用任何预定义的 Python 函数的情况下在列表中查找运行

java - 使用 Set - 自动删除重复项?

c++ - 大多数 C++ 风格的检查值是否属于某个静态集的方法

javascript - 在 Flask Web 应用程序中使用 JS 地理定位 (Python 3.6.6)

python - 如何为包含整数的列表提取字符串?

java - 你能 equalsIgnoreCase 一个 Set 吗?

python - 组合列表中离散和/或重叠的时间序列

查找排序集交集的算法

python - Python 中 ND 数组的“删除”命令

python - 如何使用 asyncio 添加连接超时?