Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python – เรียง Tuple ตามความถี่ของ Absolute Difference

ภาพรวม

จาก 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

TupleDiffFreq of Diff
(11, 26)151 (unique)
(21, 33)122 (มี (25,37) ด้วย)
(90, 11)791 (unique)
(26, 21)51 (unique)
(32, 18)141 (unique)
(25, 37)122

เรียงตาม 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])])