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

นับ Sublist ที่ไม่ซ้ำกันในลิสต์ Python

ภาพรวม

บทความสอน 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 + strstringสั้น เข้าใจง่ายแปลงเป็น string สูญเสีย type info
dict + tupletupleรักษา type, เร็วกว่าโค้ดยาวกว่า