Python listesi azalan sırada sıralanıyor


334

Bu listeyi azalan sırada nasıl sıralayabilirim?

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

Yanıtlar:


387

Bir satırda, aşağıdakileri kullanarak lambda:

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

Bir işlevin şuraya aktarılması list.sort:

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

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

13
Bir zaman grubuna dönüşüm gerekli değildir.
Marcelo Cantos

2
@Marcelo: Sadece tesadüflerle.
Ignacio Vazquez-Abrams

16
@ IgnacioVazquez-Abrams hayır, tesadüflerle değil. ISO 8601, alfabetik sıralamanın kronolojik sıra ile örtüşeceği şekilde açıkça tasarlanmıştır.
jwg

@jwg Duyguyu kabul edin (açıkça tasarım, tesadüf değil), ancak verilen biçim ISO 8601 ile uyumlu değil.
Marcelo Cantos

2
@jwg tarih ve saat bileşenleri arasında boşluk var.
Marcelo Cantos

382

Bu size dizinin sıralı bir sürümünü verecektir.

sorted(timestamp, reverse=True)

Yerinde sıralamak istiyorsanız:

timestamp.sort(reverse=True)

2
reverse2.4'te eklendi. Ancak bunun sort()kararlı olduğunu unutmayın , bu nedenle verilen iki kod parçası mutlaka aynı sonucu vermez.
Ignacio Vazquez-Abrams

3
@Rajeev - tarihleri ​​yalnızca bu şekilde yazıldıklarında (YYYY-AA-GG SS: AA: SS) sıralayabileceğinizi unutmayın; burada alfabetik olarak kronolojik olarak aynıdır. 'DD.MM.YYYY' sadece daha fazlasına ihtiyaç duyacağınız iyi bir örnek olacaktır sort(reverse=True).
eumiro

print ("Sıralamadan önce liste"); (myList) yazdırır; myList.sort (ters = Doğru); print ("sortList:" + str (myList));
Erum

@Erum bu bir cevap değil, bir cevap ve bir cevap olarak gereksizdir.
Marcelo Cantos

56

Bunu basitçe yapabilirsiniz:

timestamp.sort(reverse=True)

10

Listeniz zaten artan düzende olduğundan, listeyi tersine çevirebiliriz.

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

basit tip:

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

Bu garip bir cevaptır, çünkü sıralamayı yerinde yaparsınız, ancak sonra tersine döner. Orijinal listenin diğer adını başka bir değişkene takarsanız, daha sonra bu değerin öğeleri orijinal sıralarına veya azalan sıraya sahip olmayacaktır; takma ad, artan sırada sıralanmış bir listeyi gösterecektir . Bu oldukça şaşırtıcı olabilir ve ince bir hata kaynağı olabilir.
kaya3

0

İşte başka bir yol


timestamp.sort()
timestamp.reverse()
print(timestamp)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.