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