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

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)

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)

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)

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

9

vous tapez simplement:

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

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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.