我有一个带有单个数值的条目的嵌套列表,我需要确定哪个值的总体出现百分比更高。
[['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%的条目中。
我知道我可以迭代每个条目,使用计数器并比较最后的结果,但应该有一个更简洁的方法来做到这一点。
请帮忙吗?
提前致谢。
答案 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
也是有效匹配。