Python:在嵌套列表中返回具有较高出现百分比的值

时间:2013-10-03 13:38:07

标签: python

我有一个带有单个数值的条目的嵌套列表,我需要确定哪个值的总体出现百分比更高。

[['3', '7', '13', '4'],
 ['7', '3', '2', '1', '13', '4'],
 ['3', '13'],
 ['3', '7', '4', '13'],
 ['7', '3', '13', '4'],
 ['3', '13', '7', '8', '4'],
 ['1', '7', '3', '4', '13'],
 ['13'],
 ['7', '3', '13'],
 ['7', '3', '4']]

在此示例中,数字“13”出现在90%的条目中。

我知道我可以迭代每个条目,使用计数器并比较最后的结果,但应该有一个更简洁的方法来做到这一点。

请帮忙吗?

提前致谢。

2 个答案:

答案 0 :(得分:6)

怎么样:

items = [['3', '7', '13', '4'],
 ['7', '3', '2', '1', '13', '4'],
 ['3', '13'],
 ['3', '7', '4', '13'],
 ['7', '3', '13', '4'],
 ['3', '13', '7', '8', '4'],
 ['1', '7', '3', '4', '13'],
 ['13'],
 ['7', '3', '13'],
 ['7', '3', '4']]

from collections import Counter
from itertools import chain
print Counter(chain.from_iterable(items)).most_common(1)[0]
# 13, 9

答案 1 :(得分:3)

展平列表并计算数字(确保不允许在子列表中重复数字,否则先将它们转换为集合)

>>> c = collections.Counter(item for sublist in data for item in sublist)
>>> c
Counter({'13': 9, '3': 9, '7': 8, '4': 7, '1': 2, '8': 1, '2': 1})
>>> c.most_common(1)[0]
('13', 9)

现在将9除以数据大小(10)= 0,9 = 90%

另请注意,3也是有效匹配。