Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

จะเรียงลำดับวัตถุในรายการใน Python ได้อย่างไร?


ในการเรียงลำดับรายการ ints, floats, strings, chars หรือคลาสอื่น ๆ ที่ใช้วิธี __cmp__ สามารถจัดเรียงได้เพียงแค่เรียก sort ในรายการ หากคุณต้องการเรียงลำดับรายการในลำดับย้อนกลับ (จากมากไปน้อย) ให้ส่งผ่านพารามิเตอร์ย้อนกลับเช่นกัน

ตัวอย่าง

my_list = [1, 5, 2, 6, 0]
my_list.sort()
print(my_list)
my_list.sort(reverse=True)
print(my_list)

ผลลัพธ์

สิ่งนี้จะให้ผลลัพธ์ -

[0, 1, 2, 5, 6]
[6, 5, 2, 1, 0]

เนื่องจากทูเพิลนั้นไม่เปลี่ยนรูป พวกมันจึงไม่มีฟังก์ชันการจัดเรียงแบบแทนที่ที่สามารถเรียกได้โดยตรงจากทูเพิล คุณต้องใช้ฟังก์ชัน sorted ซึ่งส่งคืนรายการที่เรียงลำดับ หากคุณไม่ต้องการเรียงลำดับรายการ ให้ใช้ sorted แทนการเรียงลำดับ list class method sort

ตัวอย่าง

my_list = [1, 5, 2, 6, 0]
print(sorted(my_list))
print(sorted(my_list, reverse=True))

ผลลัพธ์

สิ่งนี้จะให้ผลลัพธ์ -

[0, 1, 2, 5, 6]
[6, 5, 2, 1, 0]

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

ตัวอย่าง

def get_my_key(obj):
  return obj['size']
my_list = [{'name': "foo", 'size': 5}, {'name': "bar", 'size': 3}, {'name': "baz", 'size': 7}]
my_list.sort(key=get_my_key)
print(my_list)

ผลลัพธ์

สิ่งนี้จะให้ผลลัพธ์ -

[{'name': 'bar', 'size': 3}, {'name': 'foo', 'size': 5}, {'name': 'baz', 'size': 7}]

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