ภาพรวม
จาก list of tuples ให้เรียงตามความถี่ของ |x - y| (absolute difference) ของแต่ละ tuple จากน้อยไปมาก
ตัวอย่างโค้ด
my_list = [(11, 26), (21, 33), (90, 11), (26, 21), (32, 18), (25, 37)]
print("The list is:", my_list)
# คำนวณ absolute difference ทุก tuple
diff_list = [abs(x - y) for x, y in my_list]
# diff_list = [15, 12, 79, 5, 14, 12]
# เรียง tuple ตามความถี่ของ diff ของตัวเอง
my_result = sorted(my_list, key=lambda t: diff_list.count(abs(t[0] - t[1])))
print("The resultant list is:", my_result)
ผลลัพธ์
The list is: [(11, 26), (21, 33), (90, 11), (26, 21), (32, 18), (25, 37)]
The resultant list is: [(11, 26), (90, 11), (26, 21), (32, 18), (21, 33), (25, 37)]
คำอธิบายความถี่ของ Diff
| Tuple | Diff | Freq of Diff |
|---|---|---|
| (11, 26) | 15 | 1 (unique) |
| (21, 33) | 12 | 2 (มี (25,37) ด้วย) |
| (90, 11) | 79 | 1 (unique) |
| (26, 21) | 5 | 1 (unique) |
| (32, 18) | 14 | 1 (unique) |
| (25, 37) | 12 | 2 |
เรียงตาม freq น้อยไปมาก: diff=15,79,5,14 (freq=1) ก่อน แล้ว diff=12 (freq=2) ทีหลัง
ในกลุ่ม freq=1 คงลำดับเดิม (stable sort): (11,26), (90,11), (26,21), (32,18)
ประสิทธิภาพ
diff_list.count()ใน key function เรียกซ้ำ -> O(n²)- แนะนำ pre-compute frequency dict:
from collections import Counter
diff_freq = Counter(abs(x-y) for x, y in my_list)
my_result = sorted(my_list, key=lambda t: diff_freq[abs(t[0]-t[1])])