如何创建类似于“集合交集”的东西,允许单个集合中的项丢失n/1次?

2024-04-20 01:19:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个字符串列表:

a)是两个或更多列表(所有列表中出现的字符串)的交互,例如:

words = [["a", "b", "c"], ["d", "a", "b"], ["f", "a", "g"]]
set.intersection(*(set(t) for t in words))

返回:

set(['a'])

以及

b)是两个或多个列表的交集,但单个字符串可能从单个集合中丢失n次,或者换句话说,如果我认为必要,该字符串可能从一个或多个列表中丢失。你知道吗

假设我想让它从一个列表中消失,将这个逻辑应用到上面的单词变量,我应该得到:

set(['a', 'b'])

如果我允许它从2个集合中丢失,它将返回上面words变量中的所有字符。你知道吗

我已经设法做了a),但是我怎么做b)?你知道吗


Tags: 字符串in列表for逻辑字符单词words
1条回答
网友
1楼 · 发布于 2024-04-20 01:19:31

使用Counter计算每个单词出现的次数,并选择出现次数足够的单词:

import collections
import itertools
counts = collections.Counter(itertools.chain.from_iterable(words))

threshold = len(words) - allowed_number_of_times_missing
results = {word for word in counts if counts[word] >= threshold}

如果单词可以重复出现在列表中,您可能需要将单个列表转换为集合,这样您就不会计算过多:

counts = collections.Counter(itertools.chain.from_iterable(set(l) for l in words))

相关问题 更多 >