Lista de Python ordenada en orden descendente


334

¿Cómo puedo ordenar esta lista 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"
]

Respuestas:


387

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)

Pasando una función 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 conversión a una tupla de tiempo es innecesaria.
Marcelo Cantos el

2
@Marcelo: solo por coincidencia.
Ignacio Vazquez-Abrams

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

@jwg De acuerdo con el sentimiento (es claramente por diseño, no por coincidencia), pero el formato dado no cumple con la norma ISO 8601.
Marcelo Cantos

2
@jwg hay un espacio entre los componentes de fecha y hora.
Marcelo Cantos

382

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
reversefue agregado en 2.4. Pero tenga en cuenta que sort()es estable, por lo que los dos bits de código dados no necesariamente darán el mismo resultado.
Ignacio Vazquez-Abrams

3
@Rajeev: no olvide que puede 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ías más que solo sort(reverse=True).
eumiro el

print ("Lista antes de ordenar"); print (myList); myList.sort (reverse = True); print ("sortedList:" + str (myList));
Erum

@Erum es una respuesta, no un comentario, y como respuesta, es redundante.
Marcelo Cantos

56

Simplemente puedes hacer esto:

timestamp.sort(reverse=True)

10

Como 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']

9

usted escribe simple:

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

Esta es una respuesta extraña porque haces la clasificación en el lugar pero luego la inversión fuera del lugar. Si hay otra variable alias de la lista original, su valor posterior no tendrá los elementos en su orden original, ni en orden descendente; el alias apuntará a una lista ordenada en orden ascendente . Eso podría ser bastante sorprendente, y una fuente de errores sutiles.
kaya3

0

Aquí hay otra manera


timestamp.sort()
timestamp.reverse()
print(timestamp)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.