Python queue là thư viện tích hợp cho phép tạo danh sách dùng quy tắc FIFO, first in first out. Python deque dùng quy tắc ngược, LIFO queue, last in first out. Cả hai hoạt động trên stack và queue.
Khi làm việc Python, bạn có thể muốn tạo hàng đợi (queue) các mục thay vì list. Ví dụ, giả sử viết chương trình theo dõi đăng ký hội nghị. Khi thêm ai vào danh sách, đặt họ cuối hàng đợi, rồi họ tiến lên khi người đầu vào được.
Có thư viện tích hợp Python thiết kế giúp loại vấn đề này: queues. Queues giống stack Python, khác biệt chính là queue loại bỏ mục ít thêm gần đây nhất. Stack thì loại bỏ mục thêm gần đây nhất.
Trong hướng dẫn này, phân tích cơ bản queue Python và cách triển khai.
Cơ bản về Queue
Hữu ích làm việc list Python, queue dùng khi muốn lấy thứ tự đưa vào. Quay lại ví dụ, khi ở hội nghị, bạn đặt cuối hàng khi đăng ký. Nhưng khi người danh sách vào, bạn tiến lên.
Queue khác mảng và list vì queue không truy xuất ngẫu nhiên—dữ liệu queue có thứ tự cụ thể. Vì vậy, thêm mục vào queue, nó thêm cuối. Gọi là first-in, first-out, viết tắt FIFO queue.
Trong Python, dùng list chuẩn như queue. Tuy nhiên, list khá chậm nếu chèn/xóa phần tử vì thay đổi đầu list yêu cầu di chuyển tất cả phần tử khác xuống. Do đó, nếu cần first-in, last-out list, nên dùng queue.
Python Queue
Vậy triển khai queue Python như thế nào? Để làm vậy, dùng thư viện queue tích hợp. Module queue bao gồm nhiều lớp hữu ích cho queue, nhưng hướng dẫn tập trung vào lớp queue.Queue.
81% người tham gia cho biết họ cảm thấy tự tin hơn về cơ hội việc làm công nghệ sau khi tham gia bootcamp. Được ghép nối với bootcamp ngay hôm nay.
Sinh viên trung bình tốt nghiệp bootcamp mất chưa đến sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được việc đầu tiên.
Giả sử xây dựng chương trình theo dõi người xem phim mới rạp địa phương. Có thể dùng queue theo dõi danh sách chờ xem phim.
Đầu tiên, định nghĩa lớp queue. Làm bằng mã:
from queue import Queue waitlist = Queue()
Giờ sẵn sàng tạo queue. Hàm put() cho phép dữ liệu put vào queue. Dưới đây, thêm năm người vừa đăng ký xem phim:
waitlist.put('Erin') waitlist.put('Samantha') waitlist.put('Joe') waitlist.put('Martin') waitlist.put('Helena') Giờ đã thêm năm tên queue. Erin đầu queue, rồi Samantha, đến Helena cuối. Chứng minh bằng get():
print(waitlist.get())
Mã trả về:
Erin
Như thấy, Erin đầu queue. Nếu in hai tên đầu queue, dùng get() hai lần:
print(waitlist.get()) print(waitlist.get())
Mã trả về:
Erin Samantha
Ví dụ Python Deque
Nhưng nếu muốn thêm/xóa nhiều mục từ đầu hoặc cuối queue? Đó là lúc deque. Dùng deque tạo double-ended queue thêm/xóa phần tử từ đầu hoặc cuối. Deques là last-in, first-out, viết tắt LIFO.
Dùng ví dụ trên: lưu tên chờ xem phim. Đầu tiên, khai báo deque:
from collections import deque waitlist = deque()
Giờ khởi tạo deque, thêm danh sách tên chờ:
waitlist.append('Erin') waitlist.append('Samantha') waitlist.append('Joe') waitlist.append('Martin') waitlist.append('Helena') Như thấy, dùng append() đưa mục vào queue. Xem giá trị waitlist:
print(waitlist)
Mã trả về:
deque(['Erin', 'Samantha', 'Joe', 'Martin', 'Helena'])
Như thấy, dữ liệu lưu thứ tự chèn. Nhưng nếu muốn xóa mục đầu queue? Dùng popleft(). Ví dụ:
waitlist.popleft() print(waitlist)
Mã xóa mục đầu — Erin — trả về:
deque(['Samantha', 'Joe', 'Martin', 'Helena'])
Nếu muốn xóa tất cả mục deque, dùng clear():
deque.clear() print(waitlist)
Kết quả:
deque([])
Như thấy, deque rỗng, nhưng đối tượng vẫn tồn tại.
Kết luận
Đó là xong! Bài viết thảo luận queue cấu trúc dữ liệu cho phép first-in, first-out lưu trữ. Ví dụ dùng queue giữ danh sách chờ sản phẩm mới.
Chúng ta cũng thảo luận deque tạo double-ended queue thêm/xóa mục từ queue. Bây giờ bạn sẵn sàng viết queue và deque!
Python dùng nhiều môi trường lập trình chuyên nghiệp. Tải ứng dụng Career Karma miễn phí hôm nay để học Python giúp bứt phá sự nghiệp tech!