Python程序在列表中重复排序和计数

时间:2018-03-04 08:25:53

标签: python list function sorting

编写一个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)]

2 个答案:

答案 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