Sau đó, Python popleft

Hàng đợi hai đầu hoặc deque hỗ trợ thêm và xóa các phần tử ở một trong hai đầu. Các ngăn xếp và hàng đợi được sử dụng phổ biến hơn là các dạng hàng đợi suy biến, trong đó đầu vào và đầu ra được giới hạn ở một đầu duy nhất

import collections

d = collections.deque('abcdefg')
print 'Deque:', d
print 'Length:', len(d)
print 'Left end:', d[0]
print 'Right end:', d[-1]

d.remove('c')
print 'remove(c):', d

Vì danh sách là một loại bộ chứa trình tự nên chúng hỗ trợ một số thao tác tương tự mà danh sách hỗ trợ, chẳng hạn như kiểm tra nội dung bằng __getitem__(), xác định độ dài và loại bỏ các phần tử ở giữa bằng cách so khớp danh tính

$ python collections_deque.py

Deque: deque(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
Length: 7
Left end: a
Right end: g
remove(c): deque(['a', 'b', 'd', 'e', 'f', 'g'])

Dân cư

Một deque có thể được điền từ một trong hai đầu, được gọi là "trái" và "phải" trong triển khai Python

import collections

# Add to the right
d = collections.deque()
d.extend('abcdefg')
print 'extend    :', d
d.append('h')
print 'append    :', d

# Add to the left
d = collections.deque()
d.extendleft('abcdefg')
print 'extendleft:', d
d.appendleft('h')
print 'appendleft:', d

Lưu ý rằng extleft() lặp lại đầu vào của nó và thực hiện tương đương với appendleft() cho mỗi mục. Kết quả cuối cùng là hàng đợi chứa chuỗi đầu vào theo thứ tự ngược lại

$ python collections_deque_populating.py

extend    : deque(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
append    : deque(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
extendleft: deque(['g', 'f', 'e', 'd', 'c', 'b', 'a'])
appendleft: deque(['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'])

tiêu thụ

Tương tự, các phần tử của deque có thể được tiêu thụ từ cả hai hoặc một trong hai đầu, tùy thuộc vào thuật toán được áp dụng

import collections

print 'From the right:'
d = collections.deque('abcdefg')
while True:
    try:
        print d.pop()
    except IndexError:
        break

print '\nFrom the left:'
d = collections.deque('abcdefg')
while True:
    try:
        print d.popleft()
    except IndexError:
        break

Sử dụng pop() để xóa một mục khỏi đầu "bên phải" của hàng đợi và popleft() để lấy từ đầu "bên trái"

$ python collections_deque_consuming.py

From the right:
g
f
e
d
c
b
a

From the left:
a
b
c
d
e
f
g

Vì deques an toàn cho luồng, nội dung thậm chí có thể được tiêu thụ từ cả hai đầu cùng lúc từ các luồng riêng biệt

import collections
import threading
import time

candle = collections.deque(xrange(11))

def burn(direction, nextSource):
    while True:
        try:
            next = nextSource()
        except IndexError:
            break
        else:
            print '%8s: %s' % (direction, next)
            time.sleep(0.1)
    print '%8s done' % direction
    return

left = threading.Thread(target=burn, args=('Left', candle.popleft))
right = threading.Thread(target=burn, args=('Right', candle.pop))

left.start()
right.start()

left.join()
right.join()

Các luồng trong ví dụ này xen kẽ giữa mỗi đầu, loại bỏ các mục cho đến khi hàng đợi trống

$ python collections_deque_both_ends.py

    Left: 0
   Right: 10
   Right: 9
     Left: 1
   Right: 8
    Left: 2
   Right: 7
    Left: 3
   Right: 6
    Left: 4
   Right: 5
    Left done
   Right done

xoay

Một khả năng hữu ích khác của bộ bài là xoay nó theo một trong hai hướng, để bỏ qua một số vật phẩm.

________số 8

Xoay hàng đợi sang phải (sử dụng phép quay dương) lấy các mục từ đầu bên phải và di chuyển chúng sang đầu bên trái. Xoay sang trái (với giá trị âm) lấy các mục từ đầu bên trái và di chuyển chúng sang đầu bên phải. Nó có thể giúp hình dung các mục trong deque như được khắc dọc theo cạnh của mặt số

# Nhập mô-đun bộ sưu tập

dq = bộ sưu tập. sau đó ([4, 5, 6])

print("Nối 7 vào bên phải. ", danh sách(dq))

print("Nối 3 vào bên trái. ", danh sách(dq))

# Nối nhiều giá trị vào bên phải

print("Nối 8, 9 và 10 vào bên phải. ", danh sách (dq))

# Nối nhiều giá trị vào bên trái

print("Nối 2 và 1 vào bên trái. ", danh sách(dq))

print("Chèn -1 vào chỉ số 5. ", danh sách(dq))

# Bật phần tử từ đầu bên phải

print("Xóa phần tử bên phải. ", danh sách(dq))

# Bật phần tử từ đầu bên trái

print("Xóa phần tử bên trái. ", danh sách(dq))

in("Xóa -1. ", danh sách (dq))

# Đếm số lần 5 xảy ra

print("Đếm số lần 5 xuất hiện. ", tôi)

# Trả về chỉ số '7' nếu tìm thấy giữa chỉ số 4 và 6

print("Tìm chỉ số của số 7 giữa chỉ số 4 và 6. ", tôi)

# Xoay boong ba lần sang phải

print("Xoay bộ bài sang phải 3 lần. ", danh sách (dq))

# Đảo ngược toàn bộ deque

print("Đảo ngược bộ bài. ", danh sách(dq))

Popleft có nghĩa là gì trong Python?

pop() Loại bỏ và trả về một phần tử từ phía bên phải của hàng đợi. Nếu không có phần tử nào, sẽ tăng IndexError. popleft() Xóa và trả về một phần tử từ phía bên trái của hàng đợi .

deque pop trở lại là gì?

Quay lại. các deque. hàm pop() trả về một giá trị thuộc loại Object , biểu thị phần tử đã bị xóa khỏi Deque . Phần tử này sẽ là phần tử được chèn cuối cùng trong Deque.

Làm cách nào để triển khai deque trong Python?

Cách sử dụng deque trong Python .
Chèn. nối thêm (mục). Thêm một mục vào cuối bên phải. appendleft(mục). Thêm một mục vào cuối bên trái. .
xóa. nhạc pop(). Xóa một phần tử từ đầu bên phải. popleft(). Xóa một phần tử từ đầu bên trái. .
linh tinh. đếm (giá trị). Trả về tổng số lần xuất hiện của giá trị đã cho

Nó có tốt hơn danh sách Python không?

Đối tượng deque từ các bộ sưu tập là một đối tượng giống như danh sách hỗ trợ nối nhanh và bật lên từ cả hai phía. Nó cũng hỗ trợ các hoạt động an toàn theo luồng, tiết kiệm bộ nhớ và nó được thiết kế đặc biệt để hiệu quả hơn danh sách khi được sử dụng làm hàng đợi và ngăn xếp .