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

หา K Records ที่น้อยที่สุดจาก List of Tuples ใน Python

Find Minimum K Records from Tuple List

เมื่อต้องการหา K Records ที่มีค่าน้อยที่สุดจาก List of Tuples สามารถใช้ sorted() และ Lambda Function ได้

Lambda Function

Anonymous Function กำหนดด้วย lambda รับ Argument ได้หลายตัว แต่มี Expression เดียว คืนค่าผลลัพธ์ของ Expression นั้น

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

my_list = [(67, 'Will'), (34, 'Mark'), (99, 'Dev'), (2, 'Paul')]
print("The list is : ")
print(my_list)

K = 3
print("The value of 'K' has been initialized")

# เรียงตาม Element Index 1 (ชื่อ) แล้ว取 K ตัวแรก
my_result = sorted(my_list, key=lambda x: x[1])[:K]

print("The lowest " + str(K) + " records are : ")
print(my_result)

ผลลัพธ์

The list is : [(67, 'Will'), (34, 'Mark'), (99, 'Dev'), (2, 'Paul')]
The value of 'K' has been initialized
The lowest 3 records are : [(99, 'Dev'), (34, 'Mark'), (2, 'Paul')]

คำอธิบาย

  • กำหนด List of Tuples (Number, Name) และแสดงผล
  • กำหนด K = 3 (ต้องการ 3 Records ต่ำสุด)
  • sorted(my_list, key=lambda x: x[1]) เรียงตาม Index 1 (ชื่อ) ตาม Alphabetical Order
  • [:K] Slice 取 K ตัวแรก
  • ผลลัพธ์: Dev, Mark, Paul (เรียง A-Z)

การเรียงลำดับชื่อ (Alphabetical)

# รายชื่อเรียง A-Z
names = ['Dev', 'Mark', 'Paul', 'Will']
# Dev < Mark < Paul < Will

หา K Records ต่ำสุดตาม Number (Index 0)

# เรียงตามตัวเลข Index 0
result = sorted(my_list, key=lambda x: x[0])[:K]
print(result)  # [(2, 'Paul'), (34, 'Mark'), (67, 'Will')]

ใช้ heapq.nsmallest (มีประสิทธิภาพมากกว่าสำหรับ K << N)

import heapq

# ใช้ Key function
result = heapq.nsmallest(K, my_list, key=lambda x: x[1])
print(result)  # [(99, 'Dev'), (34, 'Mark'), (2, 'Paul')]

# Time Complexity: O(n log k) vs O(n log n) ของ sorted

หา K Records สูงสุด (Largest)

# nlargest
result = heapq.nlargest(K, my_list, key=lambda x: x[1])
print(result)  # [('Will', 67), ('Paul', 2), ('Mark', 34)] - เรียงจากมากไปน้อย