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

วิธีเรียงลำดับสตริงที่มีตัวเลขอยู่ภายในอย่างถูกต้องใน Python (Natural Sort)

การเรียงลำดับแบบที่ต้องการเรียงตามตัวเลขภายในสตริง เรียกว่า Natural Sort หรือ Human Sort ตัวอย่างเช่น หากมีข้อความ:

['Hello1', 'Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25']

คุณต้องการรายการที่เรียงแล้วเป็น:

['Hello1', 'Hello2', 'Hello12', 'Hello17', 'Hello25', 'Hello29']

ไม่ใช่:

['Hello1', 'Hello12', 'Hello17', 'Hello2', 'Hello25', 'Hello29']

เพื่อทำเช่นนี้ ใช้พารามิเตอร์ key ของ sort() ซึ่งเป็นฟังก์ชันที่เรียกเพื่อคำนวณคีย์จากรายการในลิสต์ ใช้ regex ดึงตัวเลขจากสตริงและเรียงตามทั้งข้อความและตัวเลข

import re

def atoi(text):
    return int(text) if text.isdigit() else text

def natural_keys(text):
    return [atoi(c) for c in re.split(r'(\d+)', text)]

my_list = ['Hello1', 'Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25']
my_list.sort(key=natural_keys)
print(my_list)

ผลลัพธ์:

['Hello1', 'Hello2', 'Hello12', 'Hello17', 'Hello25', 'Hello29']