Python 양 단 대기 열 deque 의 실현

머리말
양 단 대기 열 deque 는 임의의 한 끝 에서 요 소 를 추가 하고 삭제 하 는 것 을 지원 합 니 다.그 중에서 스 택 과 대기 열 은 쌍 단 대기 열의 퇴화 형식 으로 그들의 입 출력 은 한 끝 에 제한 되 어 있다.
기본 용법
우선 용기 collections.deque()함수 의 기본 용법 을 살 펴 보 자.구체 적 인 코드 는 다음 과 같다.

import collections

c = collections.deque('abcdefg')
print("      :", c)
print("       :", len(c))
print("   :", c[0])
print("   :", c[-1])
실행 후 효 과 는 다음 과 같 습 니 다.
基本用法
채우다
양 끝 대기 열 이기 때문에 이 대기 열 은 임의의 한 끝 에서 요 소 를 추가 하거나 삭제 하 는 것 을 지원 합 니 다.다음은 양 끝의 추가 와 삭제 작업 을 실현 합 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.

import collections

c = collections.deque()
#          
c.extend("abcdefg")
#  (  )  
c.append('h')
print(c)
#    (  )  
c.extendleft('i')
print(c)
#    
c.pop()
print(c)
#    
c.popleft()
print(c)
#    
c.remove('c')
print(c)
실행 후 효 과 는 다음 과 같 습 니 다.
删除
list 배열 을 사용 하 는 것 과 마찬가지 로 append 를 통 해 추가 합 니 다.기본 append 는 오른쪽 끝(끝)부터 추가 합 니 다.전단 부터 추가 하려 면 extendeleft()함 수 를 사용 할 수 있 습 니 다.삭 제 는 pop()함 수 를 사용 하여 오른쪽 끝(끝)부터 삭제 하고 popleft()는 왼쪽 끝 부터 삭제 할 수 있 습 니 다.임의로 삭제 할 경우 remove()를 직접 사용 할 수 있 습 니 다.
스 레 드 보안
양 단 대기 열 은 스 레 드 가 안전 합 니 다.실제 응용 에서 우 리 는 서로 다른 스 레 드 에서 양 단 소비 대기 열의 내용 을 동시에 사용 할 수 있 습 니 다.구체 적 인 코드 는 다음 과 같다.

import collections
import threading
import time

def getItem(lor, method):
    while True:
        try:
            next = method()
        except IndexError:
            break
        else:
            print("{0}:{1}".format(lor, next))
            time.sleep(0.1)
    print('{0}:None'.format(lor))
    return

c = collections.deque("abcdefg")
t1 = threading.Thread(target=getItem, args=('Left', c.popleft))
t2 = threading.Thread(target=getItem, args=('Right', c.popleft))
t1.start()
t2.start()
t1.join()
t2.join()
실행 후 효 과 는 다음 과 같 습 니 다.
删除
위의 코드 에서 두 개의 스 레 드 는 양 끝 대기 열 deque 가 비어 있 을 때 까지 요 소 를 교체 해서 삭제 합 니 다.중복 되 지 않 은 요소 가 삭 제 된 것 을 볼 수 있 습 니 다.
빙빙 돌다
양 끝 대기 열 deque 의 또 다른 유용 한 점 은 임의의 방향 으로 회전 하여 일부 요 소 를 건 너 뛰 는 것 입 니 다.
예 를 들 어 deque 쌍 단 대기 열 을 오른쪽으로 회전(정 회전 값 사용)하면 오른쪽 에서 요 소 를 추출 하고 왼쪽 으로 이동 합 니 다.마찬가지 로 왼쪽으로 회전(마이너스)하면 왼쪽 에서 원 소 를 오른쪽 으로 이동 합 니 다.
우 리 는 코드 를 보면 매우 잘 알 수 있다.

import collections

a = collections.deque("abcdefg")
b = collections.deque("abcdefg")
c = collections.deque("abcdefg")
print(a)
b.rotate(2)
print(b)
c.rotate(-2)
print(c)
실행 후 효 과 는 다음 과 같 습 니 다.
旋转
b 의 앞 두 글자 가 앞으로 이동 하 는 것 을 볼 수 있다.c 의 앞 두 글자 가 뒤로 이동 합 니 다.
양 끝 대기 열 크기 제한
실제 2 단 대기 열 작업 에서 우 리 는 2 단 대기 열 deque 인 스 턴 스 의 최대 길 이 를 설정 하여 이 크기 를 초과 하지 않도록 할 수 있 습 니 다.이 조작 은 길이 가 불확실 한 흐름 에서 마지막 n 개의 요 소 를 찾 는 데 매우 유용 하 다.
우 리 는 먼저 코드 를 보 자.

import collections
import random

c1 = collections.deque(maxlen=5)
c2 = collections.deque(maxlen=3)

for i in range(8):
    r = random.randint(1, 100)
    print(r)
    c1.append(r)
    c2.append(r)
print(c1)
print(c2)
실행 후 효 과 는 다음 과 같 습 니 다.
限制大小
위의 코드 에서 우 리 는 쌍 단 대기 열 deque 의 최대 길 이 를 설정 했다 는 것 을 알 게 되 었 습 니 다.그러면 데 이 터 를 아무리 추가 하 더 라 도 길 이 는 영원히 변 하지 않 습 니 다.이 동시에 추가 한 데 이 터 는 순서대로 맨 앞(왼쪽)의 값 을 대체 합 니 다.
파 이 썬 2 단 대기 열 deque 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 2 단 대기 열 deque 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기