บทนำ
การนับความถี่ของแต่ละ tuple ในลิสต์ โดยถשคว่า tuple ที่มี element เหมือนกันแต่เรียงต่างกัน (เช่น (1,2) และ (2,1)) คือ tuple "เหมือนกัน" สามารถทำได้โดย เรียง element ในแต่ละ tuple ก่อน แล้วนับด้วย Counter
ตัวอย่างโค้ด
from collections import Counter
my_list = [(11, 14), (0, 78), (33, 67), (89, 0)]
print("ลิสต์เดิม:", my_list)
# เรียง element ในแต่ละ tuple ก่อนนับ
# map(sorted, my_list) -> iterator ของลิสต์ที่เรียงแล้ว
# tuple() แปลงกลับเป็น tuple เพื่อให้ hashable
normalized = (tuple(sorted(t)) for t in my_list)
# นับด้วย Counter แล้วแปลงเป็น dict
frequency = dict(Counter(normalized))
print("ความถี่ของแต่ละ tuple (ไม่สนลำดับใน tuple):", frequency)
ผลลัพธ์
ลิสต์เดิม: [(11, 14), (0, 78), (33, 67), (89, 0)]
ความถี่ของแต่ละ tuple (ไม่สนลำดับใน tuple): {(11, 14): 1, (0, 78): 1, (33, 67): 1, (0, 89): 1}
คำอธิบาย
sorted(t)เรียง element ใน tuple t (คืนลิสต์)tuple(sorted(t))แปลงกลับเป็น tuple เพื่อใส่ใน Counter ได้map(sorted, my_list)ใช้ sorted กับทุก tupleCounterนับจำนวนครั้งของแต่ละค่า
กรณีนับตามลำดับเดิม (ไม่เรียงใน tuple)
frequency = dict(Counter(my_list)) print(frequency) # นับ (1,2) และ (2,1) แยกกัน