2015-05-24 19 views
5

ho lista come questa:Contatore lista python 2.7

Pasang = [0, 4, 4, 5, 1, 7, 6, 7, 5, 7, 4, 9, 0, 10, 1, 10,...., 23, 9, 23, 7, 23] 

io conto elemento da quella lista:

satuan = Counter(pasang) 

tanto sono:

Counter({5: 10, 6: 7, 0: 5, 1: 5, 7: 5, 10: 4, 11: 4, 15: 4,...,14: 1, 21: 1}) 

voglio ottenere la chiave dal contatore, quindi faccio questo:

satu = satuan.keys() 

e ottengo elenco ordinato in questo modo:

[0, 1, 2, 4, 5,...,21, 22, 23] 

ma ho bisogno di un output come questo (non ordinate):

[5, 6, 0, 1,...,14, 21] 

Ci dispiace per il mio cattivo inglese.

+6

Cosa vuoi dire * "non ordinato" *? Sembra che tu ** lo vuoi ordinare, ma in ordine di conteggio, nel qual caso vedi ['Counter.most_common'] (https://docs.python.org/2/library/collections.html#collections .Counter.most_common). – jonrsharpe

+0

Penso che significhi "Non ordinato numericamente, ma nello stesso ordine mostrato nell'oggetto' Counter' – Barmar

risposta

4

probabilmente avete bisogno:

[key for key, freq in c.most_common()] 

dove c è l'istanza Counter.

most_common restituirà coppie di tasti e frequenze, in ordine decrescente di frequenza. Quindi estrai la parte chiave usando una comprensione.

+0

Quindi perché "Counter.keys" restituisce un risultato ordinato? – Kasramvd

+0

@Kasra Da alcuni test sembra così .... – JuniorCompressor

+2

@Kasra perché le chiavi sono numeri interi, che hash ai loro valori – jonrsharpe

0

Se si desidera mantenere l'ordine poi dare un'occhiata all'oggetto Counter appena creato, ha elementi ordinati WRT alla frequenza in ordine decrescente e si può anche ottenere lo stesso comportamento di classificare i tasti sulla frequenza e l'impostazione la bandiera reverse di essere True

import collections 
Pasang = [0, 4, 4, 5, 1, 7, 6, 7, 5, 7, 4, 9, 0, 10, 1, 10, 23, 9, 23, 7, 23] 

a = collections.Counter(Pasang) 

keys = sorted(a.keys(), key = lambda x:a[x], reverse = True) 
print a 
print keys 
>>> Counter({7: 4, 4: 3, 23: 3, 0: 2, 1: 2, 5: 2, 9: 2, 10: 2, 6: 1}) 
>>> [7, 4, 23, 0, 1, 5, 9, 10, 6]