说我有一个n个子列表的列表,
a =[["cat", "dog", "cow", "apple"], ["apple", "dog"], ["cat", "apple"]["cat","apple", "deer"]]
假设阈值百分比为70%,则子列表中至少70%的时间出现的元素应该在输出中。 在这个例子中," apple"出现在所有子列表中," cat"在所有子列表中有3/4时间。 因此,输出应该是[" apple"," cat"] 我怎样才能做到这一点?
我正在使用交集,但是只有所有子列表中的公共元素才会出现在输出中。
output= list(set(a[0]).intersection(*a))
答案 0 :(得分:3)
您可以使用Counter
>>> from collections import Counter
>>> c = Counter()
>>> for l in a:
... c.update(set(l))
...
>>> c
Counter({'apple': 4, 'cat': 3, 'dog': 2, 'deer': 1, 'cow': 1})
>>> [key for key, value in c.items() if value >= 0.7 * len(a)]
['cat', 'apple']
答案 1 :(得分:2)
这将完成这项工作:
import collections
import itertools
a =[["cat", "dog", "cow", "apple"], ["apple", "dog"], ["cat", "apple"],["cat","apple", "deer"]]
n=len(a)
counter = collections.Counter(itertools.chain(*a))
res=[i for i in counter if counter[i]>=0.7*n]
print(res)
打印
['cat', 'apple']