2010-11-15 30 views
215

¿Cómo puedo ordenar esta lista en orden descendente?Lista de Python ordenar en orden descendente

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" 
] 

Respuesta

264

En una línea, usando un lambda:

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

Pasar una función para list.sort:

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

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

La conversión a una tupla de tiempo no es necesaria. –

+2

@Marcelo: solo por coincidencia. –

+10

@ IgnacioVazquez-Abrams no, no por coincidencia. ISO 8601 está expresamente diseñado de modo que el orden alfabético coincida con el orden cronológico. – jwg

249

Esto le dará una versión ordenada de la matriz.

sorted(timestamp, reverse=True) 

Si desea ordenar en el lugar:

timestamp.sort(reverse=True) 
+2

'reverse' en 2.4. Pero tenga en cuenta que 'sort()' es estable, por lo que los dos bits de código dados no darán necesariamente el mismo resultado. –

+3

@Rajeev - no olvides que puedes ordenar las fechas solo si están escritas de esta manera (AAAA-MM-DD HH: MM: SS), donde alfabéticamente es lo mismo que cronológicamente. 'DD.MM.YYYY' sería un buen ejemplo, donde necesitaría algo más que 'sort (reverse = True)'. – eumiro

+0

print ("Lista antes de ordenar"); print (myList); myList.sort (reverso = Verdadero); print ("sortedList:" + str (myList)); – Erum

7

Desde su lista ya está en orden ascendente, simplemente podemos revertir 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'] 
34

puede simplemente hacer esto:

timestamp.sort(reverse=True) 
1

que tipo simple: se añadió

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