산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

파이썬 큐:FIFO, LIFO 예제

파이썬 대기열이란 무엇입니까?

큐는 데이터를 보관하는 컨테이너입니다. 먼저 입력된 데이터가 먼저 제거되므로 대기열을 "선입선출"(FIFO)이라고도 합니다. 대기열에는 앞과 뒤에 두 개의 끝이 있습니다. 항목은 후면에서 입력되고 전면에서 제거됩니다.

이 Python 자습서에서는 다음을 배우게 됩니다.

Python 대기열은 어떻게 작동합니까?

줄은 실제 예와 쉽게 비교할 수 있습니다. 매표소에서 줄을 서서 기다리는 사람들의 줄은 먼저 서 있는 사람이 먼저 표를 받고 다음 사람이 뒤따르는 식입니다. 큐 데이터 구조에도 동일한 논리가 적용됩니다.

다음은 대기열을 도식적으로 나타낸 것입니다.

후면 큐 내부에 항목이 삽입되는 지점을 나타냅니다. 이 예에서 7은 이에 대한 값입니다.

앞면 큐에서 항목이 제거될 지점을 나타냅니다. 대기열에서 항목을 제거하면 그림과 같이 첫 번째 요소가 1입니다.

항목 1은 대기열에 가장 먼저 삽입된 항목이고 제거하는 동안 가장 먼저 나오는 항목입니다. 따라서 대기열을 FIRST IN FIRST OUT(FIFO)

이라고 합니다.

대기열에서 항목은 순서대로 제거되며 그 사이에서 제거할 수 없습니다. 대기열에서 항목 5를 무작위로 제거할 수는 없습니다. 이렇게 하려면 5 이전의 모든 항목을 제거해야 합니다. 대기열에 있는 항목은 삽입된 순서대로 제거됩니다.

Python의 대기열 유형

Python에는 주로 두 가지 유형의 대기열이 있습니다.

파이썬 큐 설치

파이썬에서 큐로 작업하는 것은 매우 쉽습니다. 다음은 코드에서 대기열을 사용하기 위해 따라야 할 단계입니다.

1단계) 아래와 같이 큐 모듈을 가져오기만 하면 됩니다.

import queue

모듈은 기본적으로 파이썬에서 사용할 수 있으며 대기열 작업을 시작하기 위해 추가 설치가 필요하지 않습니다. 대기열 FIFO(선입선출) 및 LIFO(후입선출)의 2가지 유형이 있습니다.

2단계) FIFO 대기열로 작업하려면 아래와 같이 가져온 대기열 모듈을 사용하여 대기열 클래스를 호출합니다.

import queue
q1 = queue.Queue()

3단계) LIFO 대기열을 사용하려면 아래와 같이 LifoQueue() 클래스를 호출하십시오.

import queue
q1 = queue.LifoQueue()

Queue 및 LifoQueue 클래스 내에서 사용 가능한 메서드

다음은 Queue 및 LifoQueue 클래스 내에서 사용할 수 있는 중요한 메서드입니다.

선입선출 대기열의 예

선입선출의 경우 먼저 들어가는 요소가 먼저 나옵니다.

대기열에 항목 추가

대기열에 항목을 추가하는 예를 살펴보겠습니다. 대기열 작업을 시작하려면 먼저 아래 예와 같이 모듈 대기열을 가져옵니다.

항목을 추가하려면 다음 예제와 같이 put() 메서드를 사용할 수 있습니다.

import queue
q1 = queue.Queue()
q1.put(10) #this will additem 10 to the queue.

기본적으로 대기열의 크기는 무한하며 항목을 원하는 수만큼 추가할 수 있습니다. 대기열의 크기를 정의하려는 경우 다음과 같이 동일하게 수행할 수 있습니다.

import queue
q1 = queue.Queue(5) #The max size is 5.
q1.put(1)
q1.put(2)
q1.put(3)
q1.put(4)
q1.put(5)
print(q1.full()) # will return true.

출력:

True

이제 큐의 크기는 5이고 5개 이상의 항목을 사용하지 않으며 q1.full() 메서드는 true를 반환합니다. 더 이상 항목을 추가해도 더 이상 코드가 실행되지 않습니다.

대기열에서 항목 제거

대기열에서 항목을 제거하려면 get()이라는 메서드를 사용할 수 있습니다. 이 메서드는 호출될 때 대기열의 항목을 허용합니다.

다음 예는 대기열에서 항목을 제거하는 방법을 보여줍니다.

import queue
q1 = queue.Queue()
q1.put(10)

item1 = q1.get()

print('The item removed from the queue is ', item1)

출력:

The item removed from the queue is  10

후입선출 대기열 예

First out queue의 last인 경우 마지막에 입력된 요소가 가장 먼저 나옵니다.

LIFO로 작업하려면, 즉, 첫 번째 출력 대기열의 마지막에 대기열 모듈을 가져와서 LifoQueue() 메서드를 사용해야 합니다.

대기열에 항목 추가

여기에서 LIFO 대기열에 항목을 추가하는 방법을 이해할 것입니다.

import queue
q1 = queue.LifoQueue()
q1.put(10)

위의 예와 같이 LifoQueue에서 put() 메소드를 사용해야 합니다.

대기열에서 항목 제거

LIFOqueue에서 항목을 제거하려면 get() 메소드를 사용할 수 있습니다.

import queue
q1 = queue.LifoQueue()
q1.put(10)

item1 = q1.get()

print('The item removed from the LIFO queue is ', item1)

출력:

The item removed from the LIFO queue is  10

대기열에 1개 이상의 항목 추가

위의 예에서 단일 항목을 추가하고 FIFO 및 LIFOqueue에 대한 항목을 제거하는 방법을 보았습니다. 이제 하나 이상의 항목을 추가하고 제거하는 방법을 살펴보겠습니다.

FIFOqueue에 항목 추가

import queue
q1 = queue.Queue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

FIFO 대기열에서 항목 제거

import queue
q1 = queue.Queue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.

출력:

The value is  0
The value is  1
The value is  2
The value is  3
The value is  4
The value is  5
The value is  6
The value is  7
The value is  8
The value is  9
The value is  10
The value is  11
The value is  12
The value is  13
The value is  14
The value is  15
The value is  16
The value is  17
The value is  18
The value is  19

LIFOqueue에 항목 추가

import queue
q1 = queue.LifoQueue()
for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

LIFO 대기열에서 항목 제거

import queue
q1 = queue.LifoQueue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue


while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue. 

출력:

The value is  19
The value is  18
The value is  17
The value is  16
The value is  15
The value is  14
The value is  13
The value is  12
The value is  11
The value is  10
The value is  9
The value is  8
The value is  7
The value is  6
The value is  5
The value is  4
The value is  3
The value is  2
The value is  1
The value is  0 

정렬 대기열

다음 예는 큐 정렬을 보여줍니다. 정렬에 사용된 알고리즘은 버블 정렬입니다.

import queue
q1 = queue.Queue()
#Addingitems to the queue
q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)

#using bubble sort on the queue
n =  q1.qsize()
for i in range(n):
    x = q1.get() # the element is removed
    for j in range(n-1):
        y = q1.get() # the element is removed
        if x > y :  
            q1.put(y)   #the smaller one is put at the start of the queue
        else:
            q1.put(x)  # the smaller one is put at the start of the queue
            x = y     # the greater one is replaced with x and compared again with nextelement
    q1.put(x)

while (q1.empty() == False): 
print(q1.queue[0], end = " ")  
        q1.get()

출력:

3 4 5 10 11 21

대기열 반전

대기열을 뒤집으려면 다른 대기열과 재귀를 사용할 수 있습니다.

다음 예는 대기열을 반대로 하는 방법을 보여줍니다.

예:

import queue
q1 = queue.Queue()

q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)

def reverseQueue (q1src, q2dest) :  
    buffer = q1src.get()
    if (q1src.empty() == False) :
reverseQueue(q1src, q2dest)      #using recursion
    q2dest.put(buffer)
return q2dest

q2dest = queue.Queue()
qReversed = reverseQueue(q1,q2dest)

while (qReversed.empty() == False): 
print(qReversed.queue[0], end = " ")  
        qReversed.get()

출력:

10 3 21 4 5 11

요약:


python

  1. 파이썬 연산자
  2. 파이썬 사전
  3. EXAMPLE이 있는 Python String strip() 함수
  4. 파이썬 문자열 길이 | len() 메서드 예제
  5. Python 튜토리얼의 Yield:Generator &Yield vs Return 예제
  6. 예제가 있는 컬렉션의 Python 카운터
  7. Python의 Enumerate() 함수:루프, 튜플, 문자열(예제)
  8. Python time.sleep():코드에 지연 추가(예제)
  9. 예제가 있는 Python 목록 index()
  10. FIFO 대 LIFO:차이점, 장점 및 단점, 응용 프로그램 등