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)] - เรียงจากมากไปน้อย