2010-11-15 4 views
215

Comment trier cette liste dans l'ordre décroissant?Liste Python trier 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épondre

264

En une ligne, en utilisant un lambda:

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

En passant 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) 
+10

La conversion en ligne de temps n'est pas nécessaire. –

+2

@Marcelo: Seulement par coïncidence. –

+10

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

249

Cela vous donnera une version triée du tableau.

sorted(timestamp, reverse=True) 

Si vous voulez trier en place:

timestamp.sort(reverse=True) 
+2

'reverse' a été ajouté à 2,4. Mais notez que 'sort()' est stable, donc les deux bits de code donnés ne donneront pas nécessairement le même résultat. –

+3

@Rajeev - n'oubliez pas que vous pouvez trier des dates uniquement si elles sont écrites de cette façon (AAAA-MM-JJ HH: MM: SS), où l'ordre alphabétique est le même que dans l'ordre chronologique. 'DD.MM.YYYY' serait un bon exemple, où vous auriez besoin de plus que juste 'trier (inverse = Vrai)'. – eumiro

+0

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

7

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

Vous pouvez simplement faire ceci:

timestamp.sort(reverse=True) 
1

vous type simple:

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