2

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

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

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

返回:

set(['a'])

b)是 2 个或多个列表的交集,除了单个字符串可能从单个集合中丢失 n 次,或者换句话说,字符串可能从 1 个或多个列表中丢失,我认为这是必要的。

所以说我想让它从一个列表中丢失,将该逻辑应用于我应该得到的上述 words 变量:

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

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

我已经设法做到了 a),但是我将如何去做b)

4

1 回答 1

6

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

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))
于 2014-06-06T22:20:10.513 回答