คิวลำดับความสำคัญของ Python:คำแนะนำ
คิวลำดับความสำคัญของ Python เก็บข้อมูลในลำดับเฉพาะ มีสองวิธีในการใช้ลำดับความสำคัญของคิวใน Python:การใช้คลาสคิวและการใช้โมดูล heapq
คุณอาจต้องการสั่งซื้อข้อมูลตามค่าของแต่ละรายการในรายการ ตัวอย่างเช่น คุณอาจต้องการให้ค่าสูงสุดปรากฏก่อนในรายการ และค่าต่ำสุดจะปรากฏสุดท้ายในรายการ
นั่นคือที่มาของคิวลำดับความสำคัญ คิวลำดับความสำคัญคือโครงสร้างข้อมูลที่จัดเก็บข้อมูลตามค่าของคีย์ในลำดับจากน้อยไปมาก วิธีนี้ช่วยให้คุณเข้าถึงค่าที่เล็กและใหญ่ที่สุดในคิวได้อย่างง่ายดาย
บทช่วยสอนนี้จะอธิบายว่าทำไมคุณไม่ควรใช้รายการเพื่อสร้างคิวที่มีลำดับความสำคัญ เราจะแสดงให้คุณเห็นถึงสองวิธีที่มีประสิทธิภาพมากขึ้นซึ่งคุณสามารถใช้เพื่อสร้างคิวลำดับความสำคัญของ Python
คิวลำดับความสำคัญของ Python คืออะไร
คิวลำดับความสำคัญเป็นเวอร์ชันที่แก้ไขของคิวที่จัดเก็บข้อมูลตามลำดับองค์ประกอบที่มีลำดับความสำคัญสูงสุด ลำดับความสำคัญของแต่ละองค์ประกอบในคิวลำดับความสำคัญจะขึ้นอยู่กับค่าขององค์ประกอบ
ในวิทยาการคอมพิวเตอร์ คิวคือโครงสร้างข้อมูลที่จัดเก็บรายการในลำดับเข้าก่อนออกก่อน (FIFO) มีบางสถานการณ์ที่อาจเป็นประโยชน์ในการใช้โครงสร้างนี้
ตัวอย่างเช่น สมมติว่าคุณกำลังสร้างแอปติดตามคำสั่งซื้อสำหรับร้านอาหาร ผู้ที่สั่งอาหารก่อนควรได้รับบริการก่อนผู้ที่สั่งอาหารในลำดับต่อไป หากต้องการติดตามคำสั่งซื้อ คุณจะต้องใช้คิว
มีสองวิธีในการกำหนดลำดับความสำคัญใน Python:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
- การใช้คลาสคิว PriorityQueue
- การใช้โมดูล heapq
คุณสามารถกำหนดลำดับความสำคัญของคิวโดยใช้โครงสร้างรายการ แต่กลยุทธ์นี้มีประสิทธิภาพน้อยกว่าการใช้คลาสคิว PriorityQueue หรือโมดูล heapq
Priority Queue Python:queue.PriorityQueue
queue.PriorityQueue คลาสสร้างคิวลำดับความสำคัญของ Python คลาสนี้เป็นส่วนหนึ่งของไลบรารีคิว Python คุณต้องนำเข้าไลบรารีคิวเพื่อใช้คลาสนี้ หากต้องการดึงรายการจาก PriorityQueue คุณสามารถใช้เมธอด get()
ในการเข้าถึงคลาส PriorityQueue เราจำเป็นต้องนำเข้าไปยังโค้ดของเรา ซึ่งสามารถทำได้โดยใช้คำสั่งการนำเข้า Python นี้:
from queue import PriorityQueue
สมมติว่าเราต้องการสร้างคิวลำดับความสำคัญสำหรับผู้ถือตั๋วในคอนเสิร์ตท้องถิ่น เราสามารถทำได้โดยใช้รหัสนี้:
from queue import PriorityQueue ticket_holders = PriorityQueue() ticket_holders.put((3, 'Paul')) ticket_holders.put((1, 'Miles')) ticket_holders.put((2, 'Dani')) while not ticket_holders.empty(): item = ticket_holders.get() print(item)
รหัสของเราส่งคืน:
(1, 'Miles') (2, 'Dani') (3, 'Paul')
ในโค้ดของเรา ขั้นแรกเราจะนำเข้าคลาส PriorityQueue จาก queue ห้องสมุด จากนั้นเราจะเริ่มต้นคิวลำดับความสำคัญที่เรียกว่า ticket_holders . ต่อไป เราแทรกทูเพิลสามตัวลงในคิวลำดับความสำคัญ ซึ่งเก็บหมายเลขตั๋วและชื่อที่เกี่ยวข้องกับตั๋ว
เราใช้ Python while วนซ้ำเพื่อเรียกใช้แต่ละรายการใน ticket_holders คิวลำดับความสำคัญ จากนั้น เราดึงไอเท็มนั้นโดยใช้ get() .
queue.PriorityQueue เมธอดมีประสิทธิภาพและใช้งานง่าย ซึ่งเป็นตัวเลือกที่ดีเมื่อคุณต้องการสร้างคิวที่มีลำดับความสำคัญ
ลำดับความสำคัญของคิว Python heapq โมดูล
โมดูล heapq ให้คุณกำหนดลำดับความสำคัญของคิว Python โครงสร้างข้อมูล heapq จะลบรายการตามลำดับความสำคัญ ค่าต่ำสุดมีลำดับความสำคัญต่ำสุด และค่าสูงสุดมีลำดับความสำคัญสูงสุดในโครงสร้าง heapq
ก่อนที่เราจะสามารถใช้โมดูล heapq เราต้องนำเข้าโค้ดของเราโดยใช้คำสั่งนำเข้าต่อไปนี้:
import heapq
กลับไปที่ตัวอย่างก่อนหน้านี้ของเรา สมมติว่าเราต้องการสร้างคิวลำดับความสำคัญเพื่อเก็บข้อมูลเกี่ยวกับผู้ถือตั๋วในคอนเสิร์ต เราสามารถทำได้โดยใช้โมดูล heapq และโปรแกรมนี้:
import heapq ticket_holders = [] heapq.heappush(ticket_holders, (3, 'Paul')) heapq.heappush(ticket_holders, (1, 'Miles')) heapq.heappush(ticket_holders, (2, 'Dani')) while ticket_holders: item = heapq.heappop(ticket_holders) print(item)
รหัสของเราส่งคืน:
(1, 'Miles') (2, 'Dani') (3, 'Paul')
ขั้นแรก เรานำเข้าไลบรารี heapq จากนั้นจึงเริ่มต้นตัวแปร Python ที่เรียกว่า ticket_holders . เราใช้ heappush() วิธีการดันทูเพิลสามตัวไปยังคิวลำดับความสำคัญของเรา คิวนี้เก็บหมายเลขตั๋วสำหรับผู้ถือตั๋วแต่ละรายและชื่อผู้ถือตั๋วแต่ละราย
จากนั้นเราสร้างลูป while ซึ่งวนรอบแต่ละรายการในคิวลำดับความสำคัญของเรา ลูปนี้จะลบรายการที่ด้านบนของคิวโดยใช้ heappop() . จากนั้น รายการที่นำออกจะถูกพิมพ์ไปยังคอนโซล อย่างที่คุณเห็น รายการทั้งหมดในคิวของเราจะถูกพิมพ์ออกมาตามลำดับความสำคัญ
ทำไมคุณไม่ควรเก็บรายการไว้
ในทางเทคนิค คุณสามารถสร้างลำดับความสำคัญได้โดยใช้โครงสร้างข้อมูลรายการ Python ในการทำเช่นนั้น คุณจะต้องสร้างรายการ จากนั้นเรียงลำดับจากน้อยไปมาก
อย่างไรก็ตาม นี่เป็นวิธีที่ค่อนข้างไม่มีประสิทธิภาพในการรักษาลำดับความสำคัญของคิว เมื่อคุณเปลี่ยนรายการในรายการ คุณจะต้องเรียงลำดับรายการใหม่ ซึ่งต้องใช้เวลา
คุณสามารถใช้รายการดั้งเดิมเป็นคิวลำดับความสำคัญได้ หากคุณต้องการเก็บค่าเพียงไม่กี่ค่า แต่ถ้าคุณต้องการสร้างคิวที่ใหญ่ขึ้น รายการไม่ใช่ตัวเลือกที่ดี
สำหรับการอ้างอิง มาดูตัวอย่างของลำดับความสำคัญโดยใช้รายการ สมมติว่าเราต้องการสร้างคิวลำดับความสำคัญที่เก็บลำดับของผู้ถือตั๋วที่ควรให้เข้าสู่คอนเสิร์ตก่อน เราสามารถใช้รหัสต่อไปนี้เพื่อสร้างคิวนี้:
ticket_holders = [] ticket_holders.append((3, 'Paul')) ticket_holders.append((1, 'Miles')) ticket_holders.append((2, 'Dani')) ticket_holders.sort(reverse=True) while ticket_holders: item = ticket_holders.pop() print(item)
รหัสของเราส่งคืน:
(1, 'Miles') (2, 'Dani') (3, 'Paul')
เราได้สร้างรายชื่อ ผู้ถือตั๋ว_ผู้ถือบัตร จากนั้นเราได้เพิ่ม tuples สามรายการในรายการ ทูเพิลแต่ละตัวมีหมายเลขตั๋วของผู้ถือตั๋วและชื่อของพวกเขา จากนั้น เราใช้ Python sort() ฟังก์ชันเพื่อจัดเรียงรายชื่อผู้ถือตั๋วของเราในลำดับที่กลับกัน
เราได้สร้าง a while loop ที่วนซ้ำทุกรายการใน ticket_holders รายการและรายการที่ด้านบนของรายการ จากนั้น รหัสของเราจะพิมพ์รายการที่ถูกลบไปยังคอนโซล
บทสรุป
สองสิ่งที่พบบ่อยที่สุดในการสร้างคิวลำดับความสำคัญคือการใช้โมดูล heapq หรือ queue.PriorityQueue ระดับ. แม้ว่าในทางเทคนิคแล้วคุณสามารถใช้รายการเป็นคิวลำดับความสำคัญได้ แต่วิธีการนี้ไม่สามารถปรับขนาดได้ดี
บทช่วยสอนนี้กล่าวถึงวิธีการสร้างคิวลำดับความสำคัญใน Python โดยมีการอ้างอิงถึงตัวอย่าง ตอนนี้คุณมีความรู้ที่จำเป็นในการเริ่มสร้างลำดับความสำคัญของคุณเองอย่างผู้เชี่ยวชาญ Python!
สำหรับคำแนะนำเพิ่มเติมเกี่ยวกับวิธีการเรียนรู้ Python โปรดดูคู่มือ How to Learn Python ฉบับสมบูรณ์