407 votes

Tri de listes Python par ordre décroissant

Comment puis-je trier cette liste par ordre décroissant ?

timestamps = [
    "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"
]

488voto

Marcelo Cantos Points 91211

Cela vous donnera une version triée du tableau.

sorted(timestamps, reverse=True)

Si vous voulez trier sur place :

timestamps.sort(reverse=True)

2 votes

reverse a été ajouté en 2.4. Mais notez que sort() est stable, donc les deux bouts de code donnés ne donneront pas nécessairement le même résultat.

5 votes

@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ù l'ordre alphabétique est le même que l'ordre chronologique. DD.MM.YYYY' serait un bon exemple, où vous auriez besoin de plus que simplement sort(reverse=True) .

0 votes

Print("Liste avant tri") ; print(myList) ; myList.sort(reverse = True) ; print("sortedList : " + str(myList)) ;

422voto

Ignacio Vazquez-Abrams Points 312628

En une ligne, en utilisant un lambda :

timestamps.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]

timestamps.sort(key=foo, reverse=True)

16 votes

La conversion en un tuple de temps est inutile.

4 votes

@Marcelo : Seulement par coïncidence.

21 votes

@IgnacioVazquez-Abrams non, pas par coïncidence. La norme ISO 8601 est expressément conçue pour que l'ordre alphabétique coïncide avec l'ordre chronologique.

63voto

Wolph Points 28062

Vous pouvez simplement faire cela :

timestamps.sort(reverse=True)

12voto

mostafa elmadany Points 111

Vous êtes un type simple :

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

10voto

Russell Dias Points 17162

Puisque votre liste est déjà en ordre ascendant, nous pouvons simplement inverser la liste.

>>> timestamps.reverse()
>>> timestamps
['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']

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X