Daftar python mengurutkan dalam urutan menurun

334

Bagaimana saya bisa mengurutkan daftar ini dalam urutan menurun?

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
sumber

Jawaban:

387

Dalam satu baris, menggunakan lambda:

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

Melewati fungsi ke 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
sumber
13
Konversi ke tuple waktu tidak perlu.
Marcelo Cantos
2
@ Marscelo: Hanya karena kebetulan.
Ignacio Vazquez-Abrams
16
@ IgnacioVazquez-Abrams tidak, bukan karena kebetulan. ISO 8601 dirancang khusus sehingga urutan alfabetis bertepatan dengan urutan kronologis.
jwg
@jwg Setuju dengan sentimen (ini jelas berdasarkan desain, bukan kebetulan), tetapi format yang diberikan tidak sesuai dengan ISO 8601.
Marcelo Cantos
2
@ jwg ada ruang antara komponen tanggal dan waktu.
Marcelo Cantos
382

Ini akan memberi Anda versi array yang diurutkan.

sorted(timestamp, reverse=True)

Jika Anda ingin mengurutkan di tempat:

timestamp.sort(reverse=True)
Marcelo Cantos
sumber
2
reverseditambahkan pada 2.4. Tetapi perhatikan bahwa sort()ini stabil, sehingga dua bit kode yang diberikan tidak selalu memberikan hasil yang sama.
Ignacio Vazquez-Abrams
3
@Rajeev - jangan lupa Anda bisa mengurutkan tanggal hanya jika ditulis dengan cara ini (YYYY-MM-DD HH: MM: SS), di mana secara alfabetis sama seperti secara kronologis. 'DD.MM.YYYY' akan menjadi contoh yang baik, di mana Anda akan membutuhkan lebih dari sekadar sort(reverse=True).
eumiro
cetak ("Daftar sebelum mengurutkan"); print (myList); myList.sort (reverse = True); print ("sortListList:" + str (myList));
Erum
@Erum itu jawaban, bukan komentar, dan sebagai jawaban, itu berlebihan.
Marcelo Cantos
56

Anda cukup melakukan ini:

timestamp.sort(reverse=True)
Wolph
sumber
10

Karena daftar Anda sudah dalam urutan menaik, kami cukup membalikkan daftar.

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

Anda tipe sederhana:

timestamp.sort()
timestamp=timestamp[::-1]
mostafa elmadany
sumber
Ini adalah jawaban yang aneh karena Anda melakukan penyortiran di tempat tetapi kemudian membalikkan di tempat. Jika ada variabel lain alias daftar asli, nilainya kemudian tidak akan memiliki elemen dalam urutan aslinya, atau dalam urutan menurun; alias akan menunjuk pada daftar yang diurutkan dalam urutan menaik . Itu bisa agak mengejutkan, dan sumber bug halus.
kaya3
0

Ini cara lain


timestamp.sort()
timestamp.reverse()
print(timestamp)
I_code
sumber