有乙個列表資料,現在要按照出現次數最多的來降頻排序,並且當次數相同時保持資料出場的順序不變。
如果使用c++需要採用優先佇列和字典計數,但想著python應該不需要這麼複雜吧。
使用字典來計數,然後對字典的value進行排序,最後拼接成目標陣列#待資料 :
data = [7, 3, 3, 3, 5, 5, 5, 5, 6, 6, 6, 1]
#目標資料:
ans = [5, 5, 5, 5, 3, 3, 3, 6, 6, 6, 7, 1]
不需要使用到字典,直接使用python中的set來去重,並且把(key, times, index)當成元組直接送進sorted函式進行高階比較就可以。"""
計數後的字典結構,在這需要用到defaultdict來構建:
dic =
之後將dic送進sorted()進行高階排序比較,採用key引數指定先按照次數比較,如果次數相同
則按照出場順序進行比較
"""data = [7,3,3,3,5,5,5,5,6,6,6,1]
def times_sort(data:list):
from collections import defaultdict
times = defaultdict(list)
for i in data:
if i not in times:
dic = sorted(times.items(), key=lambda item: (-item[1][0], item[1][1]))
res =
for (k, v) in dic:
#print(k,v)
res += [k]*v[0]
return res
print(times_sort(data))
python統計列表(list)中的重複項出現的次數並進行排序"""
原理很簡單,就是對元組(key, times, index)進行乙個多變數的排序而已
input:[(1, 1, 11), (3, 3, 1), (5, 4, 4), (6, 3, 8), (7, 1, 0)]
ouput: [(5, 4, 4), (3, 3, 1), (6, 3, 8), (7, 1, 0), (1, 1, 11)]
"""def times_sort(data:list):
value = set(data)
times =
index =
for i in value:
res =
for i in zip(value, times, index):
res = sorted(res, key=lambda x:(-x[1],x[2])) #負號表示從大到小,因為預設是從小到大
ans =
for item in res:
ans += [item[0]]*item[1]
return ans
print(times_sort(data))
python 排序 sorted 如果第乙個條件 相同 則按第二個條件排序
提公升逼格的兩個函式:setdefault 與 defaultdict
jQuery實現拖動排序並將排序結果保
最近的專案中涉及到了使用者個性化定製首頁的需求,使用者要求可以隨意拖動首頁模組的位置,來實現個性化的布局。本文講解如何使用jquery實現拖動布局並將拖動後的布局位置儲存到資料庫。demo 很多 的拖動布局的例子都是採用瀏覽器的cookie來記錄使用者拖動模組的位置,也就是說拖動後各模組的排序位置資...
python實現排序
python實現排序 1.氣泡排序 將相鄰的兩個數兩兩比較,每次外迴圈都將最大的數移到最後,氣泡排序是最慢的排序演算法,實際運用中效率最低,當數列為由小到大的有序數列時為最好情況,當由大到小時為為最壞情況。def bubble sort alist count 0 遍歷每一趟比較的次數,每走一趟能得...
python實現排序
def bubblesort list iflist none if len list 1 pass else for i in range len list for j in range len list 1 i if list j list j 1 list j list j 1 list j ...