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

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)

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)

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)

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

9

seu tipo simples:

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

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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.