เริ่มต้นพื้นฐานการ Sort ข้อมูลในภาษา Python
>>> a = [3, 2, 5 ,4, 7, 1]หากต้องการ Sort จากหลังไปหน้าสามารถทำได้ดังนี้
>>> sorted(a)
[1, 2, 3, 4, 5, 7]
>>> a = [3, 2, 5 ,4, 7, 1]เรายังสามารถทำการ Sort tuple ได้ด้วย
>>> sorted(a, reverse=True)
[7, 5, 4, 3, 2, 1]
>>> t = ('boy', 'apple', 'intel')
>>> sorted(t)
['apple', 'boy', 'intel']
คีย์ที่ใช้ในการ Sort
ในภาษา Python จะมีคีย์สำหรับใช้ในการ Sort ข้อมูลด้วย เช่น
- str.lower บังคับการเรียงลำดับเพื่อรักษาตัวพิมพ์ใหญ่ และตัวพิมพ์เล็กเหมือนกัน
- len เป็นคีย์ที่เรียงตามความยาวตัวอักษร
>>> t = ('boy', 'apple', 'intel')
>>> sorted(t, key=str.lower)
['apple', 'boy', 'intel']
ตัวอย่างการใช้งานคีย์ len
>>> t = ('boy', 'apple', 'intel')
>>> sorted(t, key=len)
['boy', 'apple', 'intel']
นอกจากนั้น เรายังสามารถกำหนดเงื่อนไขในการ Sort ข้อมูลได้ด้วย ดังตัวอย่าง
>>> student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
>>> sorted(student_tuples, key=lambda student: student[2]) #เรียงโดยใช้ช่องที่ 3 คือ อายุ
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
และเรายังสามารถใช้เทคนิคนี้ทำงานกับ objects ได้ดังตัวอย่าง
>>> student_objects = [
Student('john', 'A', 15),
Student('jane', 'B', 12),
Student('dave', 'B', 10),
]
>>> class Student:
def __init__(self, name, grade, age):
self.name = name
self.grade = grade
self.age = age
>>> sorted(student_objects, key=lambda student: student.age)
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
อธิบาย
สร้าง class Student ขึ้นมา โดยกำหนดฟังก์ชั่นหลักโดยกำหนดค่าพารามิเตอร์ของฟังก์ชั่น (self, name, grade, age)
- ให้ตัวแปร name แทนพารามิเตอร์ name
- ให้ตัวแปร grade แทนพารามิเตอร์ grade
- ให้ตัวแปร age แทนพารามิเตอร์ age
Sort ภาษาไทยกับภาษา Python
ภาษา Python รองรับการ Sort ภาษาไทย ด้วยการเรียงตาม utf8 แต่การเรียงนั้นไม่ค่อยเป็นไปตามหลักภาษาไทยเท่าไร ตัวอย่างเช่น>>> strs = ['หา', 'นา', 'กา']
>>> sorted(strs)
['กา', 'นา', 'หา']
จะเห็นได้ว่า ภาษา Python ยังสามารถเรียงตามตัวอักษรในภาษาไทยได้อย่างถูกต้องอยู่ แต่ถ้ามีสระเพิ่มเข้ามา
ตัวอย่าง
>>> sorted(['ไก่', 'เป็ด', 'หมู', 'วัว'])
['วัว', 'หมู', 'เป็ด', 'ไก่']
จะเห็นได้ว่า ครั้งนี้ Python เรียงผิดหลักภาษาไทย
มีผู้ถามในกลุ่ม 2600 Thailand คำถามเดติดท่าน Narudom Roongsiriwong ครับ ว่าเราจะทำการ Sort ภาษาไทยในภาษา Python อย่างถูกต้องได้อย่างไร
ลิงค์คำถาม https://www.facebook.com/groups/2600Thailand/permalink/411798678980166/
มีท่านหนึ่งเสนอว่า สามารถใช้ PyICU ในการ Sort ภาษาไทยกับภาษา Python ได้
PyICU เป็น api สำหรับใช้เชื่อมต่อเข้ากับ ICU C++ API ของ IBM ทำงานเกี่ยวกับ localization & internationalization และรองรับภาษาไทยด้วยครับ รองรับทั้ง Python 2 , Python 3
สามารถโหลดไฟล์บีบอัดมาติดตั้งได้จาก https://pypi.python.org/pypi/PyICU/ แตกไฟล์แล้วใช้คำสั่ง
python setup.py build
python setup.py install
สำหรับผู้อ่านที่ใช้ Windows สามารถโหลดไฟล์ .whl มาติดตั้งได้จาก http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyicu
ตัวอย่างการใช้งาน PyICU ในการ Sort ภาษาไทย
>>> import icuและมีท่านหนึ่งเสนอว่า ใน Python จะมีไลบรารีพื้นฐานที่ชื่อว่า locale สามารถนำมาใช้ Sort ภาษาไทย โดยการกำหนดค่าการถอดรหัสเป็น th_TH.utf8 โดยจะเรียงตาม th_TH.utf8 ตามรูปแบบภาษาไทย
>>> collator = icu.Collator.createInstance(icu.Locale('th_TH.UTF-8'))
>>> sorted(['ไก่', 'เป็ด', 'หมู', 'วัว'], key=collator.getSortKey)
['ไก่', 'เป็ด', 'วัว', 'หมู']
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'th_TH.utf8')
>>> my = ['วัว', 'หมู', 'เป็ด', 'ไก่']
>>> sorted(my, key=locale.strxfrm)
['ไก่', 'เป็ด', 'วัว', 'หมู']
ขอขอบคุณท่าน Narudom Roongsiriwong และทุก ๆ ท่านที่แบ่งปันความรู้ครับ
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)