ภาพรวม
บทความสอน 3 วิธีในการดึงค่าเฉพาะค่าที่ไม่ซ้ำ (unique) จากลิสต์ใน Python
วิธี 1: ใช้ append() กับ for loop
def catch_unique(list_in):
unq_list = []
for x in list_in:
if x not in unq_list:
unq_list.append(x)
return unq_list
Alist = ['Mon', 'Tue', 'Mon', 'wed', 40, 40]
print(catch_unique(Alist)) # ['Mon', 'Tue', 'wed', 40]
เวลา O(n²) เนื่องจาก x not in unq_list ตรวจสอบทุกครั้ง
วิธี 2: ใช้ Set (แนะนำ)
Alist = ['Mon', 'Tue', 'Mon', 'wed', 40, 40] A_set = set(Alist) New_List = list(A_set) print(New_List) # [40, 'Tue', 'wed', 'Mon'] (ลำดับไม่คงที่)
เวลา O(n), แต่ลำดับไม่คงที่ (unordered)
วิธี 3: ใช้ numpy.unique()
import numpy as np Alist = ['Mon', 'Tue', 'Mon', 'wed', 40, 40] print(np.unique(Alist)) # ['40' 'Mon' 'Tue' 'wed'] (เรียงลำดับ)
ต้องติดตั้ง numpy, ผลลัพธ์เป็น numpy array และเรียงลำดับอัตโนมัติ
วิธีเพิ่ม: รักษาลำดับเดิม (Preserve Order)
# Python 3.7+ dict รักษาลำดับ
def unique_preserve_order(lst):
return list(dict.fromkeys(lst))
# หรือใช้ list comprehension กับ set ตรวจสอบ
def unique_ordered(lst):
seen = set()
return [x for x in lst if not (x in seen or seen.add(x))]
สรุปเปรียบเทียบ
| วิธี | เวลา | ลำดับ | หมายเหตุ |
|---|---|---|---|
| for + append | O(n²) | คงเดิม | เข้าใจง่าย แต่อช้า |
| set() | O(n) | ไม่คงที่ | เร็วที่สุด |
| numpy.unique | O(n log n) | เรียงลำดับ | ต้องติดตั้ง numpy |
| dict.fromkeys() | O(n) | คงเดิม | แนะนำสำหรับ Python 3.7+ |