簡體   English   中英

按元素的頻率排序python列表

[英]sorting a python list by frequency of elements

我有這個代碼按元素的頻率對python列表進行排序。 它適用於所有其他情況,除非兩個元素的頻率相同。 如果頻率相同,那么我想在較高值之前先放置較小的值:

counts = collections.Counter(arr)
new_list = sorted(arr, key=lambda x: counts[x])

for item in new_list:
    print item

[3,1,2,2,4]的情況下,輸出應該是[1,3,4,2,2]但我得到[3,1,4,2,2] 我該如何解決這個錯誤?

你可以將你的密鑰lambda函數設置為一個元組,因此,它將首先按counts[x]排序,如果有一個平局,它將按x排序,值本身。

 new_list = sorted(arr, key=lambda x: (counts[x], x))

您只按項目數排序。 根據這個邏輯,出現一次的所有項目都具有相同的“權重”,因此python保留其原始相關位置。 例如, 31都出現一次,因此就它們的排序而言,它們是等價的。 由於3在原始列表中位於1之前,因此它也位於結果的第一位。

您所需的輸出調用輔助排序條件 - 元素的值。 為此,您必須明確指定:

new_list = sorted(arr, key=lambda x: (counts[x], x))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM