รายการ Python เรียงลำดับจากมากไปน้อย


334

ฉันจะเรียงลำดับรายการนี้จากมากไปน้อยได้อย่างไร

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

คำตอบ:


387

ในหนึ่งบรรทัดโดยใช้lambda:

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

ผ่านฟังก์ชั่นไปที่list.sort:

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

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

13
การแปลงเป็น tuple เวลานั้นไม่จำเป็น
Marcelo Cantos

2
@Marcelo: โดยบังเอิญเท่านั้น
Ignacio Vazquez-Abrams

16
@ IgnacioVazquez-Abrams no ไม่ใช่โดยบังเอิญ ISO 8601 ได้รับการออกแบบอย่างชัดเจนเพื่อให้ลำดับตัวอักษรเกิดขึ้นตามลำดับเวลา
jwg

@ jwg เห็นด้วยกับความรู้สึก (ชัดเจนโดยการออกแบบไม่ใช่เรื่องบังเอิญ) แต่รูปแบบที่กำหนดไม่สอดคล้องกับ ISO 8601
Marcelo Cantos

2
@jwg มีช่องว่างระหว่างองค์ประกอบวันที่และเวลา
Marcelo Cantos

382

นี่จะทำให้คุณมีอาร์เรย์ที่เรียงลำดับแล้ว

sorted(timestamp, reverse=True)

หากคุณต้องการเรียงลำดับ:

timestamp.sort(reverse=True)

2
reverseถูกเพิ่มใน 2.4 แต่โปรดทราบว่าsort()มีความเสถียรดังนั้นโค้ดสองบิตที่ให้ไม่จำเป็นต้องให้ผลลัพธ์เดียวกัน
Ignacio Vazquez-Abrams

3
@Rajeev - อย่าลืมว่าคุณสามารถเรียงลำดับวันที่เฉพาะในกรณีที่พวกเขาเขียนด้วยวิธีนี้ (YYYY-MM-DD HH: MM: SS) โดยที่ตัวอักษรนั้นเหมือนกันตามลำดับเวลา 'DD.MM.YYYY' sort(reverse=True)จะเป็นตัวอย่างที่ดีที่คุณจะต้องมากกว่าเพียงแค่
eumiro

พิมพ์ ("รายการก่อนจัดเรียง"); พิมพ์ (myList); myList.sort (reverse = True); พิมพ์ ("SortList:" + str (myList));
Erum

@Erum นั่นคือคำตอบไม่ใช่ความคิดเห็นและเป็นคำตอบมันซ้ำซ้อน
Marcelo Cantos


10

เนื่องจากรายการของคุณเรียงลำดับจากน้อยไปมากเราจึงสามารถย้อนกลับรายการได้

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

คุณพิมพ์ง่าย:

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

นี่คือคำตอบที่แปลกเพราะคุณทำการเรียงลำดับในสถานที่ แต่จากนั้นกลับไปที่นอกสถานที่ หากมีตัวแปรอื่นที่ใช้นามแฝงในรายการต้นฉบับค่าของมันจะไม่มีองค์ประกอบตามลำดับเดิมหรือเรียงจากมากไปหาน้อย นามแฝงจะชี้ไปที่รายการเรียงจากน้อยไปมากเพื่อ อาจเป็นเรื่องที่น่าแปลกใจและเป็นแหล่งของแมลงที่บอบบาง
kaya3

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.