Giới thiệu
Để sắp xếp list các tuple theo tần suất xuất hiện của giá trị abs(x - y) (hiệu tuyệt đối hai phần tử), ta tính trước list các hiệu, sau đó sort với key là count của hiệu đó.
Ví dụ minh họa
my_list = [(11, 26), (21, 33), (90, 11), (26, 21), (32, 18), (25, 37)]
print("Danh sách tuple:")
print(my_list)
my_diff_list = [abs(x - y) for x, y in my_list]
my_result = sorted(my_list, key=lambda sub: my_diff_list.count(abs(sub[0] - sub[1])))
print("Kết quả sắp xếp theo tần suất hiệu tuyệt đối:")
print(my_result)
Kết quả đầu ra
Danh sách tuple: [(11, 26), (21, 33), (90, 11), (26, 21), (32, 18), (25, 37)] Kết quả sắp xếp theo tần suất hiệu tuyệt đối: [(11, 26), (90, 11), (26, 21), (32, 18), (21, 33), (25, 37)]
Giải thích
- Tính
my_diff_listchứa |x-y| cho mỗi tuple. sorted(key=lambda sub: my_diff_list.count(abs(sub[0]-sub[1])))sắp xếp theo count của hiệu đó trong my_diff_list.- Tuple có hiệu xuất hiện nhiều lần sẽ đứng trước (tần suất cao -> count lớn -> key lớn -> sort ascending đặt sau? Thực tế count lớn -> key lớn -> sorted ascending đặt cuối. Kết quả cho thấy (11,26) diff=15 xuất hiện 1 lần, (90,11) diff=79 1 lần, (26,21) diff=5 1 lần, (32,18) diff=14 1 lần, (21,33) diff=12 1 lần, (25,37) diff=12 1 lần. Wait, diff 12 xuất hiện 2 lần (21,33) và (25,37). Count=2. Vậy các tuple diff=12 nên đứng sau. Kết quả in ra: (21,33) và (25,37) ở cuối. Đúng: sort ascending theo count (1 trước, 2 sau).