統計數組中各個元素出現的次數,並按照次數從大到小排序


背景

面試時的一道筆試題,內容如題,使用自己熟悉的語言即可。

博主在拿到筆試題的生活想到了好幾種實現方式,但是沒怎么復習,有些實現方式的細節沒記清,最后使用了最繞的冒泡排序的方式完成的,所以寫這篇博客記錄一下,提醒自己。

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表示逆序

 最終效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM