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

ดึงค่าที่ไม่ซ้ำจากลิสต์ใน Python 3 วิธี

ภาพรวม

บทความสอน 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 + appendO(n²)คงเดิมเข้าใจง่าย แต่อช้า
set()O(n)ไม่คงที่เร็วที่สุด
numpy.uniqueO(n log n)เรียงลำดับต้องติดตั้ง numpy
dict.fromkeys()O(n)คงเดิมแนะนำสำหรับ Python 3.7+