Skip to main content
 首页 » 编程设计

python之从列表中查找需要多少个元素才能达到一定的覆盖率

2025年05月04日11jirigala

我有一个长列表 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