Tri de liste Python dans l'ordre décroissant

334

Comment trier cette liste par ordre décroissant?

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
la source

Réponses:

387

En une seule ligne, en utilisant un lambda:

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

Passer une fonction à 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
la source
13
La conversion en un tuple temporel n'est pas nécessaire.
Marcelo Cantos
2
@Marcelo: Seulement par coïncidence.
Ignacio Vazquez-Abrams du
16
@ IgnacioVazquez-Abrams non, pas par hasard. ISO 8601 est expressément conçue pour que l'ordre alphabétique coïncide avec l'ordre chronologique.
jwg
@jwg D'accord avec le sentiment (c'est clairement par conception, pas par coïncidence), mais le format donné n'est pas conforme à ISO 8601.
Marcelo Cantos
2
@jwg, il y a un espace entre les composants de date et d'heure.
Marcelo Cantos
382

Cela vous donnera une version triée du tableau.

sorted(timestamp, reverse=True)

Si vous souhaitez trier sur place:

timestamp.sort(reverse=True)
Marcelo Cantos
la source
2
reversea été ajouté en 2.4. Mais notez que sort()c'est stable, donc les deux bits de code donnés ne donneront pas nécessairement le même résultat.
Ignacio Vazquez-Abrams du
3
@Rajeev - n'oubliez pas que vous ne pouvez trier les dates que si elles sont écrites de cette façon (AAAA-MM-JJ HH: MM: SS), où alphabétiquement est le même que chronologiquement. 'DD.MM.YYYY' serait un bon exemple, où vous auriez besoin de plus que juste sort(reverse=True).
eumiro
print ("Liste avant tri"); imprimer (maListe); myList.sort (reverse = True); print ("sortedList:" + str (myList));
Erum
@Erum c'est une réponse, pas un commentaire, et comme réponse, c'est redondant.
Marcelo Cantos
56

Vous pouvez simplement faire ceci:

timestamp.sort(reverse=True)
Wolph
la source
10

Étant donné que votre liste est déjà dans l'ordre croissant, nous pouvons simplement inverser la liste.

>>> 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
la source
9

vous tapez simplement:

timestamp.sort()
timestamp=timestamp[::-1]
mostafa elmadany
la source
C'est une réponse étrange parce que vous effectuez le tri sur place mais ensuite l'inverse hors lieu. S'il existe une autre variable aliasant la liste d'origine, sa valeur par la suite n'aura pas les éléments dans leur ordre d'origine, ni dans l'ordre décroissant; l'alias pointera vers une liste triée par ordre croissant . Cela pourrait être plutôt surprenant, et une source de bugs subtils.
kaya3
0

Voici une autre façon


timestamp.sort()
timestamp.reverse()
print(timestamp)
I_code
la source