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

กำหนด ID ให้ค่าที่ไม่ซ้ำในลิสต์ Python

ภาพรวม

บทความสอน 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 ยังไม่มี ตั้งค่าและคืน value
  • map เรียก setdefault กับแต่ละคู่ (element, next_id)

เปรียบเทียบ

วิธีลำดับ IDข้อดี
enumerate + setตาม set (สุ่ม)โค้ดสั้น
count + mapตามลำดับเจอครั้งแรกdeterministic, ใช้ได้กับ unhashable