2010-11-15 29 views
215

Wie kann ich diese Liste in absteigender Reihenfolge sortieren?Python-Liste in absteigender Reihenfolge sortieren

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

Antwort

264

In einer Zeile, mit einer lambda:

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

Passing eine Funktion list.sort:

def foo(x): 
    return time.strptime(x, '%Y-%m-%d %H:%M:%S')[0:6] 

timestamp.sort(key=foo, reverse=True) 
+10

Die Umwandlung in ein Zeittupel ist nicht notwendig. –

+2

@Marcelo: Nur durch Zufall. –

+10

@ IgnacioVazquez-Abrams nein, nicht zufällig. ISO 8601 ist ausdrücklich so entworfen, dass die alphabetische Reihenfolge mit der chronologischen Reihenfolge übereinstimmt. – jwg

249

Dies wird Ihnen eine sortierte Version des Arrays geben.

sorted(timestamp, reverse=True) 

Wenn Sie an Ort und Stelle sortiert werden sollen:

timestamp.sort(reverse=True) 
+2

'reverse' in 2.4 hinzugefügt wurde. Beachten Sie jedoch, dass 'sort()' stabil ist, so dass die zwei angegebenen Bits nicht notwendigerweise dasselbe Ergebnis liefern. –

+3

@Rajeev - vergessen Sie nicht, Sie können Daten nur sortieren, wenn sie auf diese Weise geschrieben sind (JJJJ-MM-TT HH: MM: SS), wobei alphabetisch chronologisch identisch ist. "DD.MM.YYYY" wäre ein gutes Beispiel, wo Sie mehr als nur 'sort (reverse = True) brauchen würden. – eumiro

+0

print ("Liste vor der Sortierung"); Drucken (MeineListe); myList.sort (reverse = True); Drucken ("sortedList:" + str (myList)); – Erum

7

Seit Ihrer Liste bereits in aufsteigender Reihenfolge ist, können wir einfach die Liste umkehren.

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

Sie können dies einfach tun:

timestamp.sort(reverse=True) 
1

Sie einfache Art:

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