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

พิมพ์แถว K แถวที่มีผลรวมมากที่สุดจาก Matrix

แนวคิด

จาก matrix ให้หา K แถวที่มีผลรวม (sum) ของสมาชิกมากที่สุด ใช้ sorted() พร้อม key=lambda row: sum(row) และ reverse=True

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

my_list = [[2, 4, 6, 7], [2, 4, 8], [45], [1, 3, 5, 6], [8, 2, 1]]
print("Matrix:", my_list)

my_key = 3
print("K =", my_key)

# เรียงจากผลรวมมากไปน้อย แล้ว取 K แถวแรก
my_result = sorted(my_list, key=lambda row: sum(row), reverse=True)[:my_key]
print(f"{my_key} แถวที่ sum มากที่สุด:", my_result)

ผลลัพธ์

Matrix: [[2, 4, 6, 7], [2, 4, 8], [45], [1, 3, 5, 6], [8, 2, 1]]
K = 3
3 แถวที่ sum มากที่สุด: [[45], [2, 4, 6, 7], [1, 3, 5, 6]]

คำอธิบาย

  • sum(row) คำนวณผลรวมแต่ละแถว
  • key=lambda row: sum(row) ใช้ผลรวมเป็นเกณฑ์การเรียง
  • reverse=True เรียงมากไปน้อย
  • [:my_key] ตัด K แถวแรก

ประสิทธิภาพ

เวลา O(n log n) จากการเรียง ถ้า K ≪ n ใช้ heapq.nlargest(K, my_list, key=sum) ได้ O(n log K) เร็วกว่า

import heapq
result = heapq.nlargest(my_key, my_list, key=sum)