ภาพรวม
บทความสอน 2 วิธีนับจำนวน sublist ที่ไม่ซ้ำกันในลิสต์ซ้อน
ตัวอย่างข้อมูล
Alist = [['Mon'], ['Tue', 'Wed'], ['Tue', 'Wed']]
sublist ที่ไม่ซ้ำ: ['Mon'] (1 ครั้ง), ['Tue', 'Wed'] (2 ครั้ง)
วิธี 1: ใช้ collections.Counter
from collections import Counter
Alist = [['Mon'], ['Tue', 'Wed'], ['Tue', 'Wed']]
counts = Counter(str(elem) for elem in Alist)
print(counts)
# Counter({"['Tue', 'Wed']": 2, "['Mon']": 1})
แปลง sublist เป็น string เพราะ list ไม่ hashable ไม่สามารถเป็น key ของ Counter ได้โดยตรง
วิธี 2: ใช้ Dictionary กับ Tuple
Alist = [['Mon'], ['Tue', 'Wed'], ['Tue', 'Wed'], ['Tue', 'Wed']]
NewList = {}
for elem in Alist:
NewList.setdefault(tuple(elem), []).append(1)
for k, v in NewList.items():
NewList[k] = sum(v)
print(NewList)
# {('Mon',): 1, ('Tue', 'Wed'): 3}
ใช้ tuple แทน string เพราะ tuple hashable และรักษาโครงสร้างข้อมูล
เปรียบเทียบ
| วิธี | Key Type | ข้อดี | ข้อเสีย |
|---|---|---|---|
| Counter + str | string | สั้น เข้าใจง่าย | แปลงเป็น string สูญเสีย type info |
| dict + tuple | tuple | รักษา type, เร็วกว่า | โค้ดยาวกว่า |