Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Sắp xếp chuỗi có số bên trong đúng cách trong Python

Loại sort này gọi là natural sort hoặc human sort. Ví dụ, có text:

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

Muốn sorted list:

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

Không phải:

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

Làm bằng extra parameter của sort() – function tính key từ entry. Dùng regex extract số từ string và sort trên cả text và số.

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('(\d+)', text)]
my_list = ['Hello1', 'Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25']
my_list.sort(key=natural_keys)
print my_list

Output:

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