Deque In Python – 예제가 포함된 자습서

Deque In Python – 예제가 포함된 자습서

Python 개발자라면 deque 또는 "double-ended queue"에 대해 들어봤을 것입니다. 애플리케이션의 효율성을 높이고 성능을 가속화할 수 있는 강력한 도구입니다.

deque는 컨테이너의 양쪽 끝에서 더 빠른 추가 및 팝 작업을 제공하는 특수 컨테이너 데이터 유형입니다. 따라서 컴퓨팅에서 일반적인 목록과 같은 데이터 유형인 대기열 및 스택을 구현하는 데 유용한 도구입니다.

다양한 응용 프로그램에 매우 유용한 낮은 수준의 고도로 최적화된 데이터 구조입니다. Python 프로그래머로서 deque는 무기고에 갖고 싶은 도구 중 하나입니다.

Deques에 대한 자세한 내용과 Python 코드 에서 Deques를 구현하는 방법을 알아보려면 계속 읽으세요 !

Deque In Python – 예제가 포함된 자습서

목차

데크란?

Python이나 일반적으로 컴퓨터 프로그래밍을 처음 접하는 경우 deque가 무엇인지 궁금할 수 있습니다. Deque는 " double-ended queue "의 약자로 queue의 양쪽 끝에서 요소를 추가하고 제거할 수 있는 데이터 구조입니다.

일반 대기열과 유사하지만 대기열의 앞뒤 모두에서 요소를 추가하고 제거할 수 있는 유연성이 추가되었습니다. 이것은 파이썬의 deque가 이중 연결 리스트로 구현되어 있기 때문에 가능합니다.

Python에서 deque는 deque 클래스를 제공하는 collections 모듈을 사용하여 구현됩니다. 이 클래스는 양단 큐에서 요소를 추가하고 제거하기 위한 여러 메서드를 제공합니다.

또한 deque를 회전시키거나 완전히 지우는 것과 같은 다른 유용한 작업을 위한 기능도 제공합니다.

Python Deque의 기능

추가 및 팝 작업에 O(n) 시간 복잡도가 있는 일반 목록과 달리 deque는 O(1) 시간 복잡도를 제공합니다. 따라서 이러한 읽기 및 쓰기 작업에 대해 훨씬 더 빠르고 메모리 효율적입니다.

다음은 알아야 할 몇 가지 Python deque 기능입니다.

  • 가변 데이터 구조입니다.

  • 정수, 튜플, 배열 등과 같은 여러 데이터 유형을 저장할 수 있습니다.

  • 인덱싱은 지원하지만 슬라이싱 작업은 지원하지 않습니다.

  • 내부 정렬을 지원하지 않습니다.

  • in , sorted() , len() , reverse() 등과 같은 일반적인 내장 반복 가능 함수 및 작업을 지원합니다.

Deque의 응용

데크는 여러 가지 이유로 유용합니다. 예를 들어 컴퓨터 과학에서 공통적인 데이터 구조인 큐 또는 스택을 구현하는 데 사용할 수 있습니다.

또한 스트리밍 애플리케이션 또는 데이터에 대한 빠른 액세스가 필요한 시스템과 같이 실시간으로 데이터를 효율적으로 처리하는 데 사용할 수 있습니다.

대기열 및 스택에 사용되는 것 외에도 deque는 너비 우선 검색 알고리즘을 구현하는 데에도 사용할 수 있습니다. 또한 더 큰 순서로 항목의 슬라이딩 창을 유지하는 데 유용합니다.

Deque 생성 및 초기화 방법

collections 모듈의 내장 함수를 사용하여 deque를 만들 수 있습니다. 이 데이터 구조를 만들고 채우는 방법을 자세히 살펴보겠습니다.

deque() 함수 사용

Python에서 deque를 생성하려면 collections 모듈의 내장 deque() 함수를 사용할 수 있습니다. 이 함수는 양방향 대기열을 구현하는 데 사용할 수 있는 비어 있는 새 deque 개체를 반환합니다.

다음은 빈 deque 객체를 만드는 방법의 예입니다.

from collections import deque 

my_deque = deque() 

deque() 함수에 iterable(목록, 튜플 등)을 전달하여 초기 요소로 deque를 만들 수도 있습니다 . deque는 왼쪽에서 오른쪽으로 iterable의 요소로 초기화됩니다.

다음은 예입니다.

from collections import deque

my_list = [1, 2, 3, 4, 5] 
my_deque = deque(my_list)

요소로 Deque 초기화

다양한 메서드를 사용하여 요소가 있는 빈 양단 큐를 초기화할 수도 있습니다. 이를 수행하는 한 가지 방법은 append()appendleft() 메서드를 사용하여 deque의 오른쪽과 왼쪽에서 각각 요소를 추가하는 것입니다.

다음은 예입니다.

from collections import deque

#Initialize the empty deque
my_deque = deque()
print(my_deque)

#Add Values to the deque
my_deque.append(1) 
my_deque.append(2) 
my_deque.appendleft(3) 

print(my_deque)

이 코드를 실행한 후 deque에는 [3, 1, 2] 요소가 포함됩니다.

Deque In Python – 예제가 포함된 자습서

요소로 deque를 초기화하는 또 다른 방법은 deque() 함수 에 요소 목록을 전달하는 것입니다 .

다음은 예입니다.

from collections import deque

my_deque = deque([1, 2, 3]) 

이 코드를 실행하면 [1, 2, 3] 요소를 포함하는 deque 객체가 생성됩니다 .

전반적으로 Python에서 deque를 만들고 초기화하는 것은 간단하며 내장 deque() 함수를 사용하여 수행할 수 있습니다. append()appendleft() 메서드를 사용하여 빈 deque에 요소를 추가하여 이 작업을 수행할 수도 있습니다 .

일반적인 Deque 작업을 수행하는 방법

Python에서 deque 개체에 대해 수행할 수 있는 많은 작업이 있습니다. 더 인기있는 몇 가지를 확인해 봅시다.

Deque에 요소 추가

append()appendleft() 메서드를 사용하여 Python deque 에 요소를 추가할 수 있습니다 . append () 메서드는 deque의 오른쪽 끝에 요소를 추가하고 appendleft() 메서드는 deque의 왼쪽 끝에 요소를 추가합니다.

예를 들면 다음과 같습니다.

import collections 

# Create an empty deque 
my_deque = collections.deque() 

# Add elements to the deque 
my_deque.append(1) 
my_deque.appendleft(2) 
my_deque.append(3) 

print(my_deque) 

# Output: 
deque([2, 1, 3])

Deque에 여러 데이터 요소 추가

deque에 데이터 요소를 하나씩 추가하지 않으려면 extend() 또는 extendleft() 함수를 사용하여 프로세스 속도를 높일 수 있습니다. 이 함수는 이터러블을 받아 이터러블의 내용을 deque의 끝이나 왼쪽 끝에 각각 추가합니다.

예를 들면 다음과 같습니다.

from collections import deque

my_list = [1, 2, 3, 4, 5] 
my_deque = deque(my_list)

#Creating a tuple and list
cont = (11, 12, 13, 14)
full = [10,20,30]

#Extending the deque from the right
my_deque.extend(cont)
print(my_deque)

#Extending the deque from the left
my_deque.extendleft(full)
print(my_deque)

위의 코드에서 extend() 함수는 deque의 끝에 cont 튜플 의 여러 값을 추가합니다 . 다음으로 extendleft() 함수는 전체 목록의 여러 데이터 요소를 deque의 왼쪽 끝에 추가합니다.

Deque In Python – 예제가 포함된 자습서

Deque에서 요소 제거

pop()popleft() 메서드를 사용하여 Python deque에서 요소를 제거할 수 있습니다 . pop () 메서드는 deque의 가장 오른쪽 요소를 제거하고 반환하는 반면 popleft() 메서드는 deque의 가장 왼쪽 요소를 제거하고 반환합니다.

예를 들면 다음과 같습니다.

import collections 

#Create a deque with some elements 
my_deque = collections.deque([1, 2, 3, 4, 5]) 

#Remove elements from the deque 
my_deque.pop() 
my_deque.popleft() 

print(my_deque) 

# Output: deque([2, 3, 4])

remove() 함수를 사용하여 deque에서 특정 값을 제거할 수도 있습니다 . 이 함수는 deque에서 지정된 값의 첫 번째 항목을 제거합니다.

예를 들면 다음과 같습니다.

import collections 

#Create a deque with some elements 
my_deque = collections.deque([1, 2, 1, 4, 5]) 

#Remove elements from the deque 
my_deque.remove(1)

print(my_deque) 

# Output: deque([2, 1, 4, 5])

요소를 찾을 수 없으면 Python은 ValueError 를 반환 합니다 .

Deque에서 모든 요소 제거

Deque에서 모든 요소를 ​​제거하고 빈 상태로 되돌리려면 clear() 함수를 사용할 수 있습니다. 작동 방식은 다음과 같습니다.

from collections import deque 

#Create a deque with some elements 
my_deque = deque([1, 2, 1, 4, 5]) 

#Remove all elements from the deque 
my_deque.clear()

print(my_deque) 

# Output: 
deque([])

Accessing Elements of a Deque

You can access elements of a Python deque using the indexing operator []. You can also use a negative value in the indexing operator to access the deque elements from the right.

The indexing starts from 0 for the leftmost element and -1 for the rightmost element. Here’s an example:

import collections 

# Create a deque with some elements 
my_deque = collections.deque([1, 2, 3, 4, 5]) 

# Access elements of the deque 
print(my_deque[0]) 
# Output: 1 

print(my_deque[-1]) 
# Output: 5 

Modifying Elements of a Deque

You can modify elements of a Python deque using the indexing operator “[]” and the assignment operator “=“. Here’s an example:

from collections import deque

# Create a deque with some elements 
my_deque = deque([1, 2, 3, 4, 5]) 
print(my_deque)

# Modify elements of the deque 
my_deque[0] = 10 
my_deque[-1] = 50 

print(my_deque) 

In the above code, the indexing operator changes the first and last elements of the deque to 10 and 50 respectively.

Deque In Python – 예제가 포함된 자습서

These are the basic operations you can perform on a deque object in Python. With these operations, you can efficiently implement various data structures such as queues, stacks, and more.

How to Work with a Deque as a Queue

You can use a deque in Python to implement a queue data structure. A queue is an abstract data type that operates on a first in first out (FIFO) basis.

What this means is that you can append new items from one end of the queue and push out old items from the other end.

A good way to explain this is a line at a store. Typically, the first person to arrive will be at the head of the line and will be attended to first.

New arrivals will have to head to the back of the line and wait their turn. So, the first in will be the first answered, while the last in will be the last attended to.

Here’s how you can use a deque to implement queues.

Using append() and popleft() Methods

deque를 대기열로 사용하려면 append() 메서드를 사용하여 deque의 오른쪽 끝에 요소를 추가할 수 있습니다. 또한 popleft() 메서드를 사용하여 deque의 왼쪽 끝에서 요소를 제거할 수 있습니다.

이것은 Python에서 대기열을 구현하는 매우 효율적인 방법입니다. 다음은 예입니다.

from collections import deque 

queue = deque() 
queue.append(1) 
queue.append(2) 
queue.append(3) 

print(queue) 
# Output: deque([1, 2, 3]) 

x = queue.popleft() 
print(x) 
# Output: 1 

print(queue) 
# Output: deque([2, 3]) 

보시다시피, append() 메서드는 deque의 오른쪽 끝에 요소를 추가하고 popleft() 메서드는 deque의 왼쪽 끝에 요소를 제거합니다.

이것이 바로 대기열 구현에 필요한 것입니다.

Deque Queue가 비어 있는지 확인

deque가 비어 있는지 확인하려면 not 연산자를 사용할 수 있습니다. 다음은 예입니다.

from collections import deque 

queue = deque() 
if not queue: 
   print("Queue is empty") 
else: 
   print("Queue is not empty") 

deque가 비어 있기 때문에 " Queue is empty " 가 출력됩니다 . deque에 요소를 추가하면 더 이상 비어 있지 않습니다.

결론적으로 Python에서 deque를 큐로 사용하는 것은 매우 효율적이고 구현하기 쉽습니다.

Deque를 스택으로 사용하기

대기열과 마찬가지로 스택은 데이터 구성에 사용할 수 있는 추상 데이터 유형의 또 다른 예입니다. 대기열과 달리 스택은 후입선출(LIFO) 방식으로 작동합니다.

즉, deque의 마지막 요소가 첫 번째 요소가 됩니다. 기본 데이터 구조를 사용하여 이를 구현하는 방법은 다음과 같습니다.

append() 및 pop() 메서드 사용

Deque를 스택으로 사용할 때 append() 메서드를 사용하여 스택의 맨 위에 요소를 추가할 수 있습니다. 이 메서드는 deque의 오른쪽 끝에 요소를 추가합니다.

마찬가지로 pop() 메서드를 사용하여 스택 맨 위에서 요소를 제거할 수 있습니다 . 이 메서드는 deque의 가장 오른쪽 요소를 제거하고 반환합니다.

예를 들어 " my_stack " 이라는 deque가 있고 스택의 맨 위에 요소를 추가하려고 한다고 가정해 보겠습니다. 다음 코드를 사용할 수 있습니다.

 my_stack.append(5) 

이렇게 하면 스택 맨 위에 요소 5가 추가됩니다.

스택에서 맨 위 요소를 제거하려면 pop() 메서드를 사용할 수 있습니다: `

bal = my_stack.pop() 

print(bal)
# Output: 5

이렇게 하면 deque의 가장 오른쪽 요소(이 경우 5)가 제거되고 반환됩니다.

빈 Deque 개체 확인

부울 연산자 " not " 을 사용하여 deque 스택이 비어 있는지 확인할 수 있습니다 . deque가 비어 있으면 " not my_deque "는 True를 반환합니다 . 그렇지 않으면 False 를 반환합니다 .

예를 들어 " my_deque " 라는 deque 스택이 있고 비어 있는지 확인하려고 한다고 가정해 보겠습니다. 다음 코드를 사용할 수 있습니다.

if not my_deque: 
   print("The deque is empty") 

else: 
   print("The deque is not empty") 

deque가 비어 있으면 " The deque is empty " 가 인쇄됩니다 . 비어 있지 않으면 " The deque is not empty "가 출력됩니다.

Deque를 스택으로 사용하는 경우 스택이 비어 있는지 여부를 추적하는 것이 중요합니다. 빈 스택에서 요소를 꺼내려고 하면 IndexError 가 발생 합니다 .

제한된 Deque는 무엇입니까?

제한된 deque는 deque의 양쪽 끝에서 데이터 추가 및 팝 작업에 일부 제한이 있는 양방향 대기열입니다. 제한된 데크에는 두 가지 주요 유형이 있습니다. 입력 제한 deque 및 출력 제한 deque

그것들을 살펴봅시다:

입력 제한 Deque

입력 제한 deque를 사용하면 deque의 양쪽 끝에서 데이터 요소를 팝하거나 삭제할 수 있습니다. 그러나 deque의 한쪽 끝에서만 데이터 요소를 삽입할 수 있습니다.

이는 메모리 제약이 있는 애플리케이션에서 매우 유용합니다. 이를 사용하여 deque의 끝에서 데이터를 삭제하는 기능을 유지하면서 연대순으로 데이터 요소를 추가할 수 있습니다.

출력 제한 데크

출력 제한 deque를 사용하면 deque의 양쪽 끝에서 데이터를 삽입할 수 있습니다. 그러나 프런트 엔드라고 하는 deque의 한쪽 끝에서만 항목을 삭제할 수 있습니다.

출력 제한 deque는 FIFO 데이터 구조를 구현해야 하지만 여전히 양쪽 끝에서 데이터를 추가하는 기능을 원하는 경우에 매우 유용합니다.

마무리하자

지금쯤이면 Python의 deque 모듈과 이를 사용하여 효율적인 대기열과 스택을 구현하는 방법에 대해 잘 이해하셨을 것입니다.

Deques는 기존 목록에 비해 많은 이점을 제공하는 다목적 데이터 구조입니다. 이러한 이점은 메모리 효율적인 추가 및 팝 작업과 관련하여 명백합니다.

스택 또는 양방향 대기열을 구현해야 하는 경우에도 훌륭한 선택입니다. 데크 사용의 주요 이점은 다음과 같습니다.

  • deque의 양쪽 끝에서 효율적인 O(1) 추가 및 팝 작업

  • deque의 첫 번째 요소와 마지막 요소에 대한 빠른 O(1) 액세스

  • 스레드로부터 안전한 원자적 작업에 대한 기본 제공 지원

  • deque에서 요소를 삽입, 제거 및 회전하는 유연한 방법

전반적으로 deque 모듈은 보다 효율적이고 유지 관리 가능한 Python 코드를 작성하는 데 도움이 되는 강력한 도구입니다. 작은 스크립트에서 작업하든 대규모 프로젝트에서 작업하든 데크는 확실히 기존 목록이나 다른 데이터 구조의 대안으로 고려할 가치가 있습니다!

Python에 대해 자세히 알아볼 준비가 되었습니다. 아래 재생 목록을 확인하세요.


파이썬에서 자기란 무엇인가: 실제 사례

파이썬에서 자기란 무엇인가: 실제 사례

파이썬에서 자기란 무엇인가: 실제 사례

R에서 RDS 파일을 저장하고 로드하는 방법

R에서 RDS 파일을 저장하고 로드하는 방법

R의 .rds 파일에서 개체를 저장하고 로드하는 방법을 배웁니다. 이 블로그에서는 R에서 LuckyTemplates로 개체를 가져오는 방법도 다룹니다.

첫 N 영업일 재방문 – DAX 코딩 언어 솔루션

첫 N 영업일 재방문 – DAX 코딩 언어 솔루션

이 DAX 코딩 언어 자습서에서는 GENERATE 함수를 사용하는 방법과 측정값 제목을 동적으로 변경하는 방법을 알아봅니다.

LuckyTemplates에서 다중 스레드 동적 시각적 개체 기술을 사용한 인사이트 쇼케이스

LuckyTemplates에서 다중 스레드 동적 시각적 개체 기술을 사용한 인사이트 쇼케이스

이 자습서에서는 다중 스레드 동적 시각적 개체 기술을 사용하여 보고서의 동적 데이터 시각화에서 통찰력을 만드는 방법을 다룹니다.

LuckyTemplates의 컨텍스트 필터링 소개

LuckyTemplates의 컨텍스트 필터링 소개

이 기사에서는 필터 컨텍스트를 살펴보겠습니다. 필터 컨텍스트는 모든 LuckyTemplates 사용자가 처음에 배워야 하는 주요 주제 중 하나입니다.

LuckyTemplates 온라인 서비스에서 앱을 사용하기 위한 최고의 팁

LuckyTemplates 온라인 서비스에서 앱을 사용하기 위한 최고의 팁

LuckyTemplates Apps 온라인 서비스가 다양한 소스에서 생성된 다양한 보고서 및 인사이트를 관리하는 데 어떻게 도움이 되는지 보여주고 싶습니다.

시간 경과에 따른 이익 마진 변화 분석 - LuckyTemplates 및 DAX를 사용한 분석

시간 경과에 따른 이익 마진 변화 분석 - LuckyTemplates 및 DAX를 사용한 분석

LuckyTemplates에서 측정 분기 및 DAX 수식 결합과 같은 기술을 사용하여 수익 마진 변경을 해결하는 방법을 알아봅니다.

DAX Studio의 데이터 캐시에 대한 구체화 아이디어

DAX Studio의 데이터 캐시에 대한 구체화 아이디어

이 자습서에서는 데이터 캐시의 구체화 아이디어와 결과 제공 시 DAX 성능에 미치는 영향에 대해 설명합니다.

LuckyTemplates를 사용한 비즈니스 보고

LuckyTemplates를 사용한 비즈니스 보고

지금까지 Excel을 계속 사용하고 있다면 지금이 비즈니스 보고 요구 사항에 LuckyTemplates를 사용하기 시작하는 가장 좋은 시기입니다.

LuckyTemplates 게이트웨이란? 당신이 알아야 할 모든 것

LuckyTemplates 게이트웨이란? 당신이 알아야 할 모든 것

LuckyTemplates 게이트웨이란? 당신이 알아야 할 모든 것