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

เรียงลำดับลิสต์แรกตามลำดับของลิสต์ที่สองใน Python

บทนำ

การเรียงลำดับลิสต์หนึ่ง (values) ตามลำดับของลิสต์อีกหนึ่ง (keys) สามารถทำได้โดยใช้ zip() รวมคู่ แล้ว sorted() เรียงตาม key แล้วดึง value ออกมา

ตัวอย่างโค้ด

def sort_by_second_list(values, keys):
    """เรียง values ตามลำดับของ keys"""
    paired = zip(keys, values)
    sorted_pairs = sorted(paired, key=lambda x: x[0])
    return [val for _, val in sorted_pairs]

# ทดสอบ 1
list1 = ['m', 'o', 'p', 'l', 'k', 'v', 'c', 'e', 'r']
list2 = [1, 0, 0, 2, 2, 1, 1, 0, 0]

print("Values:", list1)
print("Keys:  ", list2)
print("ผลลัพธ์:", sort_by_second_list(list1, list2))

# ทดสอบ 2
list3 = ['h', 'k', 'l', 'p', 'q', 'p', 'k', 'l', 'h', 'm', 'u', 'z', 'f', 't']
list4 = [0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 0]

print("\nValues:", list3)
print("Keys:  ", list4)
print("ผลลัพธ์:", sort_by_second_list(list3, list4))

ผลลัพธ์

Values: ['m', 'o', 'p', 'l', 'k', 'v', 'c', 'e', 'r']
Keys:   [1, 0, 0, 2, 2, 1, 1, 0, 0]
ผลลัพธ์: ['e', 'o', 'p', 'r', 'c', 'm', 'v', 'k', 'l']

Values: ['h', 'k', 'l', 'p', 'q', 'p', 'k', 'l', 'h', 'm', 'u', 'z', 'f', 't']
Keys:   [0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 0]
ผลลัพธ์: ['h', 'h', 'q', 't', 'f', 'k', 'l', 'p', 'u', 'k', 'l', 'm', 'p', 'z']

คำอธิบาย

  • zip(keys, values) รวมเป็นคู่ (key, value)
  • sorted(..., key=lambda x: x[0]) เรียงตาม key (element แรกของคู่)
  • [val for _, val in ...] ดึงเฉพาะ value ออกมา
  • Stable sort: ค่าที่ key เท่ากัน จะคงลำดับเดิมไว้

ใช้งานกับ dict

# เรียง dictionary ตาม value
d = {'a': 3, 'b': 1, 'c': 2}
sorted_keys = [k for k, v in sorted(d.items(), key=lambda x: x[1])]
print(sorted_keys)  # ['b', 'c', 'a']