基于percentag的列表元素提取

2024-05-11 19:26:39 发布

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

假设我有一个n个子列表

a =[["cat", "dog", "cow", "apple"], ["apple", "dog"],  ["cat", "apple"]["cat","apple", "deer"]]

假设阈值百分比为70%,子列表中至少有70%的时间出现的元素应该在输出中。 在本例中,“苹果”出现在所有子列表中,“猫”出现在所有子列表中的3/4倍。 因此,输出应该是[“apple”,“cat”] 我怎样才能做到这一点?你知道吗

我使用的是交集,但是只有所有子列表中的公共元素才会出现在输出中。你知道吗

output= list(set(a[0]).intersection(*a))

Tags: 苹果元素apple列表output时间阈值list
2条回答

你可以使用^{}

>>> 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']

这将完成以下工作:

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']

相关问题 更多 >