Nattawut Phetmak
Jack of all Trades
การเรียงลำดับข้อมูลใน Python นั้น มีเครื่องมือที่ช่วยอำนวยความสะดวกคือ sorted
และ list.sort
ความแตกต่างของสองตัวนี้ คือ sorted
จะมองแบบ functional ได้ของใหม่ออกมา (โดยที่ของเก่าไม่เปลี่ยนค่า) ส่วน list.sort
จะมองแบบ OOP คือเข้าไปเปลี่ยนแปลงการเรียงลำดับในตัว list object
chaos = [4, 1, 0, 3, 2]
# functional paradigm
print(sorted(chaos))
# get: [0, 1, 2, 3, 4]
print(chaos)
# get: [4, 1, 0, 3, 2]
# OOP paradigm
chaos.sort()
print(chaos)
# get: [0, 1, 2, 3, 4]
หรือถ้าจะเรียงจากมากไปน้อย
chaos.sort(reverse=True)
print(chaos)
# get: [4, 3, 2, 1, 0]
สิ่งที่ต้องระวังคือ สมาชิกแต่ละตัวใน list ต้องอยู่ในรูปแบบของข้อมูลที่สามารถนำมาเปรียบเทียบมากกว่า-น้อยกว่าได้ (อย่าง [1, 2, 'a']
หมดสิทธิ์)
ตัวเลือกอีกตัวคือ key ที่ใช้ในการเปรียบเทียบ ซึ่งทำได้โดยส่งผ่านฟังก์ชันที่รับค่า 1 ตัวแปรเข้าไปเป็น key
letter = ['a', 'b', 'A', 'B']
letter.sort()
print(letter)
# get: ['A', 'B', 'a', 'b']
letter.sort(key=str.lower)
print(letter)
# get: ['A', 'a', 'B', 'b']
def test_sort(c):
if c >= 'a':
return ord(c)
else:
return -ord(c)
letter.sort(key=test_sort)
print(letter)
# get: ['B', 'A', 'a', 'b']
ข้อมูลทางเทคนิคคือการเรียงลำดับจะใช้อัลกอริทึม Timsort ซึ่งมีประสิทธิภาพที่ O(n log n) และเป็นแบบ stable (สมาชิกหลังการจัดเรียงแล้วยังคงลำดับเดิมอยู่) ครับ