ภาพรวม
บทความสอน 2 วิธีกำหนด ID เฉพาะตัว (unique ID) ให้แต่ละค่าที่ไม่ซ้ำในลิสต์ ค่าที่ซ้ำจะได้ ID เดียวกัน
ตัวอย่างข้อมูล
Alist = [5, 3, 3, 12]
ค่าที่ไม่ซ้ำ: 5, 3, 12 → กำหนด ID 0,1,2
ผลลัพธ์ที่คาดหวัง: [2, 0, 0, 1] หรือ [0, 1, 1, 3] ขึ้นอยู่กับวิธี
วิธี 1: enumerate + set
Alist = [5, 3, 3, 12]
enum_dict = {v: k for k, v in enumerate(set(Alist))}
list_ids = [enum_dict[n] for n in Alist]
print(list_ids) # [2, 0, 0, 1] (ลำดับจาก set ไม่คงที่)
สร้าง mapping จากค่า unique ไป ID โดย enumerate(set)
วิธี 2: itertools.count + map
from itertools import count
Alist = [5, 3, 3, 12]
dict_ids = list(map({}.setdefault, Alist, count()))
print(dict_ids) # [0, 1, 1, 3] (ID ตามลำดับที่เจอครั้งแรก)
อธิบาย:
count()สร้าง iterator 0,1,2,3...{}.setdefault(key, value)ถ้า key ยังไม่มี ตั้งค่าและคืน valuemapเรียก setdefault กับแต่ละคู่ (element, next_id)
เปรียบเทียบ
| วิธี | ลำดับ ID | ข้อดี |
|---|---|---|
| enumerate + set | ตาม set (สุ่ม) | โค้ดสั้น |
| count + map | ตามลำดับเจอครั้งแรก | deterministic, ใช้ได้กับ unhashable |