Sắp xếp danh sách chuỗi dựa trên phần số nhúng trong chuỗi. Sử dụng biểu thức chính quy (regex), map() và list().
Mã nguồn
import re
def my_digit_sort(my_list):
# Tìm tất cả dãy số trong chuỗi, chuyển thành int, lấy số đầu tiên
return list(map(int, re.findall(r'\d+', my_list)))[0]
my_list = ["pyt23hon", "fu30n", "lea14rn", 'co00l', 'ob8uje3345t']
print("Danh sách gốc:", my_list)
my_list.sort(key=my_digit_sort)
print("Danh sách đã sắp xếp:", my_list)
Kết quả
Danh sách gốc: ['pyt23hon', 'fu30n', 'lea14rn', 'co00l', 'ob8uje3345t'] Danh sách đã sắp xếp: ['co00l', 'ob8uje3345t', 'lea14rn', 'pyt23hon', 'fu30n']
Giải thích
re.findall(r'\d+', my_list)tìm tất cả dãy số liên tiếp trong chuỗi.map(int, ...)chuyển các chuỗi số thành số nguyên.list(...)[0]lấy số đầu tiên tìm được làm khóa sắp xếp.- Sắp xếp theo giá trị số: 0, 8, 14, 23, 30.
Lưu ý: Nếu chuỗi không chứa số, re.findall trả về list rỗng, gây lỗi IndexError. Cần xử lý trường hợp ngoại lệ.