我有一个长列表 x = [4,6,7,8,8,8,9,0,9,1,7,7] 我知道我可以使用计数器来查看某个项目出现了多少次。
x = [4,6,7,8,8,8,9,0,9,1,7,7]
from collections import Counter
Counter(x)
>>Counter({0: 1, 1: 1, 4: 1, 6: 1, 7: 3, 8: 3, 9: 2})
我可以使用以下方式对它们进行排序:
Counter(x).most_common()
>>Counter(x).most_common()
Out[33]: [(7, 3), (8, 3), (9, 2), (0, 1), (1, 1), (4, 1), (6, 1)]
现在,我想知道需要多少元素才能覆盖列表的 50%。比如7和8出现了6次,有12个元素,所以我只需要7和8就可以覆盖列表中50%的元素。如果我加 9,我有 8 个元素,所以 7、8 和 9 覆盖了列表中 66% 的元素。
如果我的列表有数十万个元素,我该怎么做?
请您参考如下方法:
我只是遍历 most_common 并累积项目,直到达到列表 len 的给定百分比:
def common_elements(lst, pct):
required = len(lst) * pct
found = 0
result = []
for tup in Counter(lst).most_common():
result.append(tup[0])
found += tup[1]
if found >= required:
break
return result
