Classificação da lista Python em ordem decrescente

334

Como posso classificar essa lista em ordem 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"
]
Rajeev
fonte

Respostas:

386

Em uma linha, usando um lambda:

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

Passando uma função para 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
fonte
13
A conversão para uma tupla de tempo é desnecessária.
Marcelo Cantos
2
@ Marcelo: Apenas por coincidência.
Ignacio Vazquez-Abrams
16
@ IgnacioVazquez-Abrams não, não por coincidência. A ISO 8601 foi projetada expressamente para que a ordem alfabética coincida com a ordem cronológica.
GTC
@jwg concordo com o sentimento (é claramente pelo design, não por acaso), mas o formato dado não se conforma com ISO 8601.
Marcelo Cantos
2
@jwg existe um espaço entre os componentes de data e hora.
Marcelo Cantos
381

Isso fornecerá uma versão classificada da matriz.

sorted(timestamp, reverse=True)

Se você deseja classificar no local:

timestamp.sort(reverse=True)
Marcelo Cantos
fonte
2
reversefoi adicionado em 2.4. Mas observe que sort()é estável, portanto os dois bits de código fornecidos não necessariamente resultam no mesmo resultado.
Ignacio Vazquez-Abrams
3
@ Rajeev - não esqueça que você pode classificar as datas apenas se elas forem escritas dessa maneira (AAAA-MM-DD HH: MM: SS), onde alfabeticamente é a mesma cronologicamente. 'DD.MM.AAAA' seria um bom exemplo, onde você precisaria mais do que apenas sort(reverse=True).
eumiro
print ("Listar antes da classificação"); print (myList); myList.sort (reverse = True); print ("sortList:" + str (myList));
Erum
@ Erum, é uma resposta, não um comentário, e como resposta, é redundante.
Marcelo Cantos
56

Você pode simplesmente fazer isso:

timestamp.sort(reverse=True)
Wolph
fonte
10

Como sua lista já está em ordem crescente, podemos simplesmente reverter a 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
fonte
9

seu tipo simples:

timestamp.sort()
timestamp=timestamp[::-1]
mostafa elmadany
fonte
Essa é uma resposta estranha, porque você faz a classificação no local, mas depois a inversão no local. Se houver outra variável com o nome alternativo da lista original, seu valor posteriormente não terá os elementos em sua ordem original nem em ordem decrescente; o alias apontará para uma lista classificada em ordem crescente . Isso pode ser bastante surpreendente e uma fonte de erros sutis.
kaya3
0

Aqui está outra maneira


timestamp.sort()
timestamp.reverse()
print(timestamp)
I_code
fonte