1

我有一个包含单个数值的条目的嵌套列表,我需要确定哪个值的总外观百分比更高。

[['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% 的条目中。

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

请问有什么帮助吗?

提前致谢。

4

2 回答 2

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
于 2013-10-03T13:43:24.487 回答
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这也是有效的匹配。

于 2013-10-03T13:43:16.230 回答