前言
面試題:如何統計數組中出現次數最多的數據,按出現次數由大到小排序
這個排序看似簡單,涉及到的基礎知識點還是很多的,真正寫起來並不容易
備注:本篇是以python3.6講解的,python2會多一個cmp參數,cmp函數在python3上已經丟棄了
cmp(x,y) 函數用於比較2個對象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。
保存數據
1.首先應該提出隊列里面有多少個數據,做去重處理,去重最快的辦法計算用到set集合了
a = ["a", "b", "a", "c", "a", "c", "b", "d", "e", "c", "a", "c"]
# set集合去重
duixiang = set(a) # 先去重,取出計數對象
print(duixiang)
2.然后計算每個對象再list里面出現的次數,可以保存為字典格式,一一對應
# 保存為dict,一一對應
d = {}
for i in duixiang:
d[i] = a.count(i)
字典按value排序
1.保存為字典后,按字典的value值大小排序,這個才是本題的難點,由於dict是無序的,所以只能用list去排序,把dict的key和value保存為tuplue對象
# 對字典按value排序
a = sorted(d.items(), key=lambda x: x[1], reverse=True)
print(a)
參考代碼:
# coding:utf-8
# 作者:上海-悠悠
a = ["a", "b", "a", "c", "a", "c", "b", "d", "e", "c", "a", "c"]
# set集合去重
duixiang = set(a) # 先去重,取出計數對象
# 保存為dict,一一對應
d = {}
for i in duixiang:
d[i] = a.count(i)
# 對字典按value排序
a = sorted(d.items(), key=lambda x: x[1], reverse=True)
print(a)
python自動化交流 QQ群:779429633