การจัดเรียงแบบไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่การเรียงลำดับสตริงใน Python 2 หรือ 3 (ทดสอบใน Python 2.7.17 และ Python 3.6.9):
>>> x = ["aa", "A", "bb", "B", "cc", "C"]
>>> x.sort()
>>> x
['A', 'B', 'C', 'aa', 'bb', 'cc']
>>> x.sort(key=str.lower) # <===== there it is!
>>> x
['A', 'aa', 'B', 'bb', 'C', 'cc']
ที่สำคัญคือkey=str.lower
. คำสั่งเหล่านี้มีลักษณะเป็นเพียงคำสั่งเพื่อให้คัดลอกวางได้ง่ายเพื่อให้คุณสามารถทดสอบได้:
x = ["aa", "A", "bb", "B", "cc", "C"]
x.sort()
x
x.sort(key=str.lower)
x
โปรดทราบว่าหากสตริงของคุณเป็นสตริง Unicode อย่างไรก็ตาม (เช่นu'some string'
) ดังนั้นใน Python 2 เท่านั้น (ไม่ใช่ใน Python 3 ในกรณีนี้) x.sort(key=str.lower)
คำสั่งด้านบนจะล้มเหลวและแสดงข้อผิดพลาดต่อไปนี้:
TypeError: descriptor 'lower' requires a 'str' object but received a 'unicode'
หากคุณได้รับข้อผิดพลาดนี้ให้อัปเกรดเป็น Python 3 ซึ่งจัดการการเรียงลำดับ Unicode หรือแปลงสตริง Unicode ของคุณเป็นสตริง ASCII ก่อนโดยใช้การทำความเข้าใจรายการดังนี้:
# for Python2, ensure all elements are ASCII (NOT unicode) strings first
x = [str(element) for element in x]
# for Python2, this sort will only work on ASCII (NOT unicode) strings
x.sort(key=str.lower)
อ้างอิง:
- https://docs.python.org/3/library/stdtypes.html#list.sort
- แปลงสตริง Unicode เป็นสตริงใน Python (มีสัญลักษณ์พิเศษ)
- https://www.programiz.com/python-programming/list-comprehension