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

จะเรียงลำดับสตริงด้วยตัวเลขใน Python ได้อย่างไร?


การเรียงลำดับประเภทนี้ที่คุณต้องการเรียงลำดับตามตัวเลขภายในสตริงเรียกว่าการเรียงลำดับตามธรรมชาติหรือการเรียงลำดับของมนุษย์ ตัวอย่างเช่น หากคุณมีข้อความ:

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

จากนั้นคุณต้องการให้รายการที่เรียงลำดับเป็น:

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

และไม่ใช่:

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

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

 import re
 def atoi(text):
    return int(text) if text.isdigit() elsetext
def natural_keys(text):
    return [ atoi(c) for c in re.split('(\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']