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

Finding Relative Order of Elements ใน List Python: หาลำดับสัมพัทธ์ของสมาชิก

ได้ลิสต์จำนวนเต็ม ต้องการ "ลำดับสัมพัทธ์" คือ ถ้าเรียงจากน้อยไปมาก แต่ละตัวอยู่ตำแหน่งที่เท่าไหร่

ตัวอย่าง

[78, 14, 0, 11] → เรียงได้ [0, 11, 14, 78] → ดัชนี: 78→3, 14→2, 0→0, 11→1 → ผลลัพธ์ [3, 2, 0, 1]

วิธี 1: ใช้ sorted() กับ index()

listA = [78, 14, 0, 11]
res = [sorted(listA).index(x) for x in listA]
print(res)  # [3, 2, 0, 1]

วิธี 2: ใช้ enumerate(sorted()) สร้าง Dict แล้ว Map (เร็วกว่า O(n log n))

listA = [78, 14, 0, 11]
rank = {val: idx for idx, val in enumerate(sorted(listA))}
res = [rank[x] for x in listA]
print(res)  # [3, 2, 0, 1]

สรุป

วิธี 2 เร็วกว่ามากสำหรับลิสต์ใหญ่ เพราะ index() เป็น O(n) ทำให้วิธี 1 เป็น O(n²) ส่วนวิธี 2 เป็น O(n log n) จากการเรียง + O(n) จากการ Map