Khi cần sắp xếp danh sách dựa trên tổng khoảng cách của các cặp số nằm trong một phạm vi cho trước, ta sử dụng hàm abs(), sum() và list comprehension bên trong một hàm tùy chỉnh.
Ví dụ
def sum_range_incl(my_row):
return sum([abs(element[1] - element[0]) for element in my_row if element[0] > i and element[0] < j and element[1] > i and element[1] < j])
my_list = [[(12, 4), (55, 10), (11, 16)], [(42, 14)], [(2, 5), (2, 28), (9, 16)], [(12, 6), (6, 13)]]
print("Danh sách ban đầu:")
print(my_list)
i, j = 2, 15
my_list.sort(key=sum_range_incl)
print("Danh sách sau khi sắp xếp:")
print(my_list)
Kết quả
Danh sách ban đầu: [[(12, 4), (55, 10), (11, 16)], [(42, 14)], [(2, 5), (2, 28), (9, 16)], [(12, 6), (6, 13)]] Danh sách sau khi sắp xếp: [[(42, 14)], [(2, 5), (2, 28), (9, 16)], [(12, 4), (55, 10), (11, 16)], [(12, 6), (6, 13)]]
Giải thích
Hàm
sum_range_incltính tổng hiệu tuyệt đối của các cặp số (element[1] - element[0]) chỉ khi cả hai giá trị đều nằm trong khoảng (i, j).Danh sách được sắp xếp tăng dần theo giá trị tổng này.