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

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)
Ignacio Vazquez-Abrams
fuente
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)
Marcelo Cantos
fuente
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)
Wolph
fuente
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']
Russell Dias
fuente
9

usted escribe simple:

timestamp.sort()
timestamp=timestamp[::-1]
mostafa elmadany
fuente
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)
I_code
fuente