Sort

การเรียงลำดับข้อมูลใน 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 (สมาชิกหลังการจัดเรียงแล้วยังคงลำดับเดิมอยู่) ครับ

Nattawut Phetmak

Jack of all Trades

blog comments powered by Disqus