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

โปรแกรม Python หา N ค่าที่มากที่สุดจากลิสต์

กำหนดลิสต์จำนวนเต็ม งานคือหา N ค่าที่มากที่สุดในลิสต์

ตัวอย่าง


Input:  [40, 5, 10, 20, 9]
N = 2
Output: [40, 20]

อัลกอริทึม (วิธีที่ 1: Traverse และ Remove)

  1. รับลิสต์จำนวนเต็มและจำนวน N
  2. วนลูป N รอบ
  3. แต่ละรอบหาค่าสูงสุด เก็บในลิสต์ใหม่ แล้วลบออกจากลิสต์เดิม

โค้ดตัวอย่าง (วิธีที่ 1)


def N_largest_elements(list1, N):
    new_list = []
    for i in range(N):
        max1 = 0
        for j in range(len(list1)):
            if list1[j] > max1:
                max1 = list1[j]
        list1.remove(max1)
        new_list.append(max1)
    print("Largest numbers are:", new_list)

# Driver code
my_list = [12, 61, 41, 85, 40, 13, 77, 65, 100]
N = 4
N_largest_elements(my_list, N)

ผลลัพธ์


Largest numbers are: [100, 85, 77, 65]

วิธีที่ 2: ใช้ sorted() (ง่ายและ Pythonic)


def n_largest_sorted(lst, n):
    return sorted(lst, reverse=True)[:n]

my_list = [12, 61, 41, 85, 40, 13, 77, 65, 100]
print(n_largest_sorted(my_list, 4))  # [100, 85, 77, 65]

วิธีที่ 3: ใช้ heapq.nlargest() (มีประสิทธิภาพมากที่สุด)


import heapq

my_list = [12, 61, 41, 85, 40, 13, 77, 65, 100]
print(heapq.nlargest(4, my_list))  # [100, 85, 77, 65]

การเปรียบเทียบ

วิธีTime ComplexitySpaceหมายเหตุ
Traverse + RemoveO(N × n)O(N)แก้ไขลิสต์เดิม ช้า
sorted()O(n log n)O(n)เรียงทั้งลิสต์
heapq.nlargest()O(n log N)O(N)เร็วที่สุดสำหรับ N ≪ n

วิธีที่ 4: ใช้ nlargest กับ key function


# หา 3 dictionary ที่มี 'score' มากที่สุด
data = [
    {'name': 'Alice', 'score': 85},
    {'name': 'Bob', 'score': 92},
    {'name': 'Charlie', 'score': 78},
    {'name': 'David', 'score': 96}
]
top3 = heapq.nlargest(3, data, key=lambda x: x['score'])
print(top3)
# [{'name': 'David', 'score': 96}, {'name': 'Bob', 'score': 92}, {'name': 'Alice', 'score': 85}]

สรุป: ใช้ heapq.nlargest() สำหรับประสิทธิภาพดีที่สุด โดยเฉพาะตอน N เล็กกว่า n มาก