如何创建类似于"集合交叉点"的内容,以允许单个集合中缺少项目n/1次或更多次?

01A*_*key 2 python list set set-intersection python-2.7

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

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

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

返回:

set(['a'])
Run Code Online (Sandbox Code Playgroud)

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

所以说我希望允许它从单个列表中丢失,将该逻辑应用于我应该获得的上述单词变量:

set(['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

如果我允许它从2套中丢失,它将返回上述单词变量中的所有字符.

我已经设法做了一个),但我怎么做b)

use*_*ica 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}
Run Code Online (Sandbox Code Playgroud)

如果单词可以在列表中重复出现,您可能希望将单个列表转换为集合,这样就不会超量:

counts = collections.Counter(itertools.chain.from_iterable(set(l) for l in words))
Run Code Online (Sandbox Code Playgroud)