Ordinamento dell'elenco Python in ordine decrescente


334

Come posso ordinare questo elenco in ordine decrescente?

timestamp = [
    "2010-04-20 10:07:30",
    "2010-04-20 10:07:38",
    "2010-04-20 10:07:52",
    "2010-04-20 10:08:22",
    "2010-04-20 10:08:22",
    "2010-04-20 10:09:46",
    "2010-04-20 10:10:37",
    "2010-04-20 10:10:58",
    "2010-04-20 10:11:50",
    "2010-04-20 10:12:13",
    "2010-04-20 10:12:13",
    "2010-04-20 10:25:38"
]

Risposte:


387

In una riga, usando un lambda:

timestamp.sort(key=lambda x: time.strptime(x, '%Y-%m-%d %H:%M:%S')[0:6], reverse=True)

Passando una funzione a list.sort:

def foo(x):
    return time.strptime(x, '%Y-%m-%d %H:%M:%S')[0:6]

timestamp.sort(key=foo, reverse=True)

13
La conversione in una tupla temporale non è necessaria.
Marcelo Cantos,

2
@Marcelo: solo per coincidenza.
Ignacio Vazquez-Abrams,

16
@ IgnacioVazquez-Abrams no, non a caso. ISO 8601 è espressamente progettato in modo tale che l'ordine alfabetico coincida con l'ordine cronologico.
jwg

@jwg Concordo con il sentimento (è chiaramente di progettazione, non una coincidenza), ma il formato dato non è conforme alla ISO 8601.
Marcelo Cantos,

2
@jwg c'è uno spazio tra i componenti di data e ora.
Marcelo Cantos,

382

Questo ti darà una versione ordinata dell'array.

sorted(timestamp, reverse=True)

Se si desidera ordinare sul posto:

timestamp.sort(reverse=True)

2
reverseè stato aggiunto in 2.4. Ma nota che sort()è stabile, quindi i due bit di codice forniti non daranno necessariamente lo stesso risultato.
Ignacio Vazquez-Abrams,

3
@Rajeev - non dimenticare che puoi ordinare le date solo se sono scritte in questo modo (AAAA-MM-GG HH: MM: SS), in ordine alfabetico uguale cronologicamente. 'GG.MM.AAAA' sarebbe un buon esempio, in cui avresti bisogno di qualcosa di più del semplice sort(reverse=True).
eumiro,

print ("Elenco prima dell'ordinamento"); stampare (myList); myList.sort (reverse = True); print ("sortList:" + str (myList));
Erum,

@Erum è una risposta, non un commento, e come risposta, è ridondante.
Marcelo Cantos,

56

Puoi semplicemente farlo:

timestamp.sort(reverse=True)

10

Poiché la tua lista è già in ordine crescente, possiamo semplicemente invertire la lista.

>>> timestamp.reverse()
>>> timestamp
['2010-04-20 10:25:38', 
'2010-04-20 10:12:13', 
'2010-04-20 10:12:13', 
'2010-04-20 10:11:50', 
'2010-04-20 10:10:58', 
'2010-04-20 10:10:37', 
'2010-04-20 10:09:46', 
'2010-04-20 10:08:22',
'2010-04-20 10:08:22', 
'2010-04-20 10:07:52', 
'2010-04-20 10:07:38', 
'2010-04-20 10:07:30']

9

sei semplice tipo:

timestamp.sort()
timestamp=timestamp[::-1]

Questa è una risposta strana perché si esegue l'ordinamento sul posto ma poi l'inversione fuori posto. Se esiste un'altra variabile che aliasa l'elenco originale, il suo valore in seguito non avrà gli elementi nel loro ordine originale, né in ordine decrescente; l'alias punterà a un elenco ordinato in ordine crescente . Potrebbe essere piuttosto sorprendente e una fonte di bug sottili.
kaya3,

0

Ecco un altro modo


timestamp.sort()
timestamp.reverse()
print(timestamp)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.