Python-Listensortierung in absteigender Reihenfolge


333

Wie kann ich diese 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"
]

Antworten:


386

In einer Zeile mit einem lambda:

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

Übergabe einer Funktion an list.sort:

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

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

13
Die Konvertierung in ein Zeittupel ist nicht erforderlich.
Marcelo Cantos

2
@ Marcelo: Nur durch Zufall.
Ignacio Vazquez-Abrams

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

@jwg Stimmen Sie dem Gefühl zu (es ist eindeutig beabsichtigt, kein Zufall), aber das angegebene Format entspricht nicht ISO 8601.
Marcelo Cantos

2
@jwg Zwischen den Datums- und Zeitkomponenten befindet sich ein Leerzeichen.
Marcelo Cantos

380

Dadurch erhalten Sie eine sortierte Version des Arrays.

sorted(timestamp, reverse=True)

Wenn Sie vor Ort sortieren möchten:

timestamp.sort(reverse=True)

2
reversewurde in 2.4 hinzugefügt. Beachten Sie jedoch, dass dies sort()stabil ist, sodass die beiden angegebenen Codebits nicht unbedingt das gleiche Ergebnis liefern.
Ignacio Vazquez-Abrams

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

print ("Liste vor Sortierung"); print (myList); myList.sort (reverse = True); print ("sortierte Liste:" + str (myList));
Erum

@Erum das ist eine Antwort, kein Kommentar, und als Antwort ist es überflüssig.
Marcelo Cantos

56

Sie können dies einfach tun:

timestamp.sort(reverse=True)

10

Da Ihre Liste bereits in aufsteigender Reihenfolge ist, können wir die Liste einfach 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']

9

Sie einfache Typ:

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

Dies ist eine seltsame Antwort, da Sie die Sortierung an Ort und Stelle durchführen, dann aber die Umkehrung fehl am Platz. Wenn es eine andere Variable gibt, die die ursprüngliche Liste aliasisiert, hat ihr Wert danach die Elemente weder in ihrer ursprünglichen Reihenfolge noch in absteigender Reihenfolge. Der Alias ​​zeigt auf eine Liste in aufsteigender Reihenfolge. Das könnte ziemlich überraschend sein und eine Quelle subtiler Fehler sein.
Kaya3

0

Hier ist ein anderer Weg


timestamp.sort()
timestamp.reverse()
print(timestamp)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.