2012-11-19 77 views
0

我試圖做一些像在Python中的列表與獎牌統計排序。我有一個名單不斷增長。列表中的每個元素都是一個包含四個元素的列表。在Python中的排名列表由他們的元素

如:L = [[0,1,2,3],[3,0,6,2]]

我想排在這個名單使得結果原來是(對於上述EG)的元素:

L = [[3,0,6,2],[0,1,2,3]]即像一個獎牌相符的地方內部列表中的第一個元素是金,第二個是銀等

是否有一種簡單的方法可以在python中執行此操作?

回答

4

您可以只使用內置的sorted

sorted(L, reverse=True) 

[編輯:以上將金牌總數,然後數銀的等方面均居這似乎是最常見的方式排名金屬(請參閱Metal Tally here)。您還可以定義您自己的功能,並使用cmp關鍵字對它們進行排名。]

+0

不知道什麼是錯誤的分類鏈接 - 它似乎並不奏效 - 我已經試過固定的3倍 – Gerrat

+0

我已經編輯爲你(它得到之前它會需要一段時間雖然) - 您的帖子的第一行是在代碼塊中。 –

0

如果您要尋找的是根據誰獲得最多獎牌的降序排序,你可以使用:

L = [[0,1,2,3],[3,0,6,2],[0,0,0,22]] 
sorted(L, key=sum, reverse=True) 

指定sum作爲關鍵原因排序以調用每個元素上的函數來計算關鍵值。

+0

或者,可以使用他自己的排名功能,例如, 'medal_tally_rank = lambda L:L [0] * 4 + L [1] * 2 + L [2] * 1 + L [3] * 0.5'然後執行排序(L,key = medal_tally_rank,...) '。 –

+0

爲什麼'4','2','1'和'0.5'?是不是隻有基於黃金的獎牌排名,那麼如果綁在銀牌上? –

+0

他們只是隨機數字,他們沒有任何意義,但是如果他存儲了4個數字,我也會這樣做,即使它們很小,它們都必須具有一定的價值。也有不同的排名系統。例如,英國媒體使用5:3:1,來自澳大利亞的人使用3:2:1,而紐約時報的一篇文章提到4:2:1。 –

1

不需要做任何事情,這就是內置的sorted所做的。

L = [[0,1,2,3],[3,0,6,2],[3,0,5,2],[3,0,6,3],[11,1,0,0],[3,0,7,1]] 
sorted(L,reverse=True) 

[[11, 1, 0, 0], 
[3, 0, 7, 1], 
[3, 0, 6, 3], 
[3, 0, 6, 2], 
[3, 0, 5, 2], 
[0, 1, 2, 3]] 
相關問題