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

นับจำนวนครั้งที่ Tuple ปรากฏใน List (Record Similar Tuple Occurrences) ใน Python

บทนำ

การนับความถี่ของแต่ละ 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 กับทุก tuple
  • Counter นับจำนวนครั้งของแต่ละค่า

กรณีนับตามลำดับเดิม (ไม่เรียงใน tuple)

frequency = dict(Counter(my_list))
print(frequency)  # นับ (1,2) และ (2,1) แยกกัน