编写一个Python函数直方图(l),它将带有重复的整数列表作为输入,并返回一对对列表,如下所示: 对于l中出现的每个数字n,函数返回的列表中应该只有一对(n,r),其中r是l中l的重复次数。
最终列表应按r(重复次数)的升序排序。对于具有相同重复次数的数字,请按照数字值的升序排列对。
例如:
>>> histogram([13,12,11,13,14,13,7,7,13,14,12])
[(11, 1), (7, 2), (12, 2), (14, 2), (13, 4)]
>>> histogram([7,12,11,13,7,11,13,14,12])
[(14, 1), (7, 2), (11, 2), (12, 2), (13, 2)]
>>> histogram([13,7,12,7,11,13,14,13,7,11,13,14,12,14,14,7])
[(11, 2), (12, 2), (7, 4), (13, 4), (14, 4)]
答案 0 :(得分:1)
Counter对象非常适合。
>>> from collections import Counter
>>> Counter([13,12,11,13,14,13,7,7,13,14,12])
Counter({13: 4, 12: 2, 14: 2, 7: 2, 11: 1})
编辑: 如果您希望将结果放入按值排序的元组列表中,则可以执行以下操作。
>>> count = Counter([13,12,11,13,14,13,7,7,13,14,12])
>>> sorted(count.items(), key=lambda c: c[1])
[(11, 1), (12, 2), (14, 2), (7, 2), (13, 4)]
答案 1 :(得分:0)
下次请分享您自己尝试过的内容。
def make_histogram(lst):
new_lst = list(set([(i, lst.count(i)) for i in lst]))
new_lst.sort(key=lambda x: x[1])
return new_lst