统计数组中各个元素出现的次数,并按照次数从大到小排序

本文介绍了一种在Python中统计并排序数组元素的方法。通过三种不同的实现方式:使用内置函数Counter简化统计过程;利用sorted结合lambda表达式进行排序;以及采用冒泡排序的经典算法实现。此外还提供了一个Linux命令实现的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

面试时的一道笔试题,内容如题,使用自己熟悉的语言即可。

博主在拿到笔试题的生活想到了好几种实现方式,但是没怎么复习,有些实现方式的细节没记清,最后使用了最绕的冒泡排序的方式完成的,所以写这篇博客记录一下,提醒自己。

Python实现

定义一个数组:

a = [1, 2, 3, 4, 2, 1, 4, 1, 1]
实现方式一(内置函数 Counter)  
from collections import Counter

print(Counter(a))
实现方式二(内置函数 sorted)  

首先转换为字典,转换为“元素-出现次数”对:

b = {}
for i in a:
    b[i] = a.count(i)
m = sorted(b.items(),key=lambda x:x[1],reverse=True) 
print m
实现方式三(冒泡排序)   
c = b.items() # b为方法二中的字典,转换为列表
for j in range(len(b)):
    for i in range(len(b)-j-1):
        if c[i][1] < c[i+1][1]:
            c[i] ,c[i+1] = c[i+1],c[i]
print c

Linux命令实现

定义一个数组

array=(1 2 4 3 5 3 5)  

取出数组所有元素:

然后将元素间空格转换为换行符:

然后先使用sort进行排序(uniq -c 只能对相邻的数据进行统计):

再使用uniq进行统计:

最后对统计后的数据进行排序:

完整命令
echo ${array[*]}|tr " " "\n"|sort|uniq -c|sort -r   #-r表示逆序

 最终效果如下:

转载于:https://www.cnblogs.com/Detector/p/7593813.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值