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

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)

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)

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)

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

9

Anda tipe sederhana:

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

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.