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

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)
Ignacio Vazquez-Abrams
quelle
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)
Marcelo Cantos
quelle
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)
Wolph
quelle
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']
Russell Dias
quelle
9

Sie einfache Typ:

timestamp.sort()
timestamp=timestamp[::-1]
Mostafa Elmadany
quelle
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)
I_code
quelle