python数字排序_python 统计数组内数字出现次数,按照次数从大到小,若次数相同,则按照数字从小到大排序...

题目我忘了,大概意思就是文章题目说的,输入第一行输入n是测试样例个数,然后每一个样例,第一行输入length表示数组长度,第二行输入表示数组的每一个元素。比如说:

输入:

2

6

1 1 1 4 2 7

10

1 1 2 2 2 3 3 3 9 5

输出:

1 1 1 2 4 7

2 2 2 3 3 3 1 1 5 9

写这个题目主要是因为里面包含了python里两个比较好的东西,一个是count,一个是dict按照item排序,并且多条件排序。

首先是count()。

很简单,我们想要用count()函数来统计数组中的每一个元素出现的次数,那就首先用一个set来保存数组中都出现过哪些不重复的元素,然后对set中每一个元素用一个count,保存在一个字典中,比如这样:

arr = [1, 1, 2, 2, 2, 3, 3, 3, 9, 5]

count_dict = {}

for i in set(arr):

count_dict[i] = arr.count(i)

print(count_dict)

输出就是:

{1: 2, 2: 3, 3: 3, 5: 1, 9: 1}

这就是我们统计出现次数的字典。

下面是dict的sort

现在有了这个字典了,我们要按照字典的值进行排序,而且要实现多条件排序,这里是双条件排序,也就是说我们首先按照出现次数从大到小排序,然后如果出现次数相同,我们就按照键值从小到大排序。

这边主要参考了这篇文章,写的不错:

主要用到了一个lambda,这是用来声明匿名函数的,结合sort使用可以很方便的对诸如元组tuple、字典等按照不同位置的值进行排序。

举个栗子:

result = sorted(dict.items(), key=lambda item: item[1])

这句话就表明按照字典dict的值进行排序(默认是从小到大排序的),如果要按照dict的键进行排序,那么后面的就是item[0]。这里需要提到一点,前面提到这个方法可以对dict和tuple按照特定位置的值进行排序,但是如果是dict的话,是不能直接排序的,要先dict.items()获取可遍历对象,其实也就是返回了一个个的tuple。

原始的是默认升序的,要反转一下。另外,现在完成了首先按照值进行排序,那么在值相同的时候按照键进行排序怎么做呢?就在item:后面用一个元组来替代item[1],也就是(-item[1], item[0]),这也就是说,按照值从大到小(写个负),键从小到大排序。

result = sorted(count_dict.items(), key= lambda item: (-item[1], item[0]))

这样输出排序后的结果就是:

[(2, 3), (3, 3), (1, 2), (5, 1), (9, 1)]

如果想要按照键也从大到小,那么就是item: (-item[1], -item[0]),结果如下:

[(3, 3), (2, 3), (1, 2), (9, 1), (5, 1)]

Post Views:

1,823

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值