Kiểu sắp xếp này mà bạn muốn sắp xếp trên cơ sở các số bên trong chuỗi được gọi là sắp xếp tự nhiên hoặc sắp xếp con người. Ví dụ:nếu bạn có văn bản:
['Hello1','Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25']
Sau đó, bạn muốn danh sách được sắp xếp là:
['Hello1', 'Hello2','Hello12', 'Hello17', 'Hello25', 'Hello29']
và không:
['Hello1','Hello12', 'Hello17', 'Hello2', 'Hello25', 'Hello29']
Để làm điều này, chúng ta có thể sử dụng tham số bổ sung mà sort () sử dụng. Đây là một hàm được gọi để tính khóa từ mục nhập trong danh sách. Chúng tôi sử dụng regex để trích xuất số từ chuỗi và sắp xếp trên cả văn bản và số.
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
Điều này sẽ cung cấp cho bạn kết quả:
['Hello1', 'Hello2','Hello12', 'Hello17', 'Hello25', 'Hello29']