[Python] Collections - deque | ๊ฐœ๋…, ๋ฉ”์†Œ๋“œ, list์™€์˜ ์ฐจ์ด
๐Ÿฆœ Computer Language/Python

[Python] Collections - deque | ๊ฐœ๋…, ๋ฉ”์†Œ๋“œ, list์™€์˜ ์ฐจ์ด

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋ฉด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Collections ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ deque ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž !

 

 

1. Deque๋ž€?

์–‘๋ฐฉํ–ฅ์—์„œ ํ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

 

queue(ํ)๋Š” FIFO(First in, First out), ์ฆ‰ ๋จผ์ € ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ์„ ์ž…์„ ์ถœ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. deque๋Š” ์–‘๋ฐฉํ–ฅ ํ์˜ ๊ตฌ์กฐ์ด๊ธฐ์— ์•ž, ๋’ค ์–‘์ชฝ ๋ฐฉํ–ฅ์—์„œ element ์ถ”๊ฐ€/์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์œ ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

 

2. deque์˜ ๋ฉ”์†Œ๋“œ(Method)

 

- append(x)

: deque ์˜ค๋ฅธ์ชฝ์— x๋ฅผ ์ถ”๊ฐ€

 

from collections import deque

d = deque('abc') # deque ์ƒ์„ฑ

d.append(1) 

print(list(d)) # listํ˜•์œผ๋กœ ์ถœ๋ ฅ
# ['a','b','c',1]

 

- appendleft()

: deque ์™ผ์ชฝ์— x๋ฅผ ์ถ”๊ฐ€

 

from collections import deque

d = deque('abc') # deque ์ƒ์„ฑ

d.appendleft(1) 

print(list(d)) # listํ˜•์œผ๋กœ ์ถœ๋ ฅ
#[1, 'a', 'b', 'c']

 

- pop()

: ๋ฐํฌ์˜ ์˜ค๋ฅธ์ชฝ ๋์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๊ทธ ์ „์— ๋‚จ์•„์žˆ๋Š” ์š”์†Œ๊ฐ€ ์—†๋‹ค๋ฉด IndexError ๋ฐœ์ƒ

 

from collections import deque

d = deque('abc') # deque ์ƒ์„ฑ

d.pop()

print(list(d))
# ['a','b']

 

- popleft()

: ๋ฐํฌ์˜ ์™ผ์ชฝ ๋์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๊ทธ ์ „์— ๋‚จ์•„์žˆ๋Š” ์š”์†Œ๊ฐ€ ์—†๋‹ค๋ฉด IndexError ๋ฐœ์ƒ

 

from collections import deque

d = deque([1,2,3]) # deque ์ƒ์„ฑ

d.popleft()

print(list(d))
# [2,3]

 

- extend()

: iterable argument์˜ element๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐํฌ์˜ ์˜ค๋ฅธ์ชฝ์„ ํ™•์žฅ

 

from collections import deque

d = deque([1,2,3]) # deque ์ƒ์„ฑ

d.extend([4,5])

print(list(d))
# [1,2,3,4,5]

 

append์™€ extend๊ฐ€ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐ extend()๋Š” iterable argument(list, set, string, bytes, dictionary..)์˜ ์š”์†Œ๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” error๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

from collections import deque

d = deque([1,2,3]) # deque ์ƒ์„ฑ

d.extend(4)

print(list(d))
# TypeError: 'int' object is not iterable

 

- extendleft()

: iterable argument์˜ element๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐํฌ์˜ ์˜ค๋ฅธ์ชฝ์„ ํ™•์žฅ, ์ด ๋•Œ ์ถ”๊ฐ€ํ•œ ์š”์†Œ๋Š” ์˜ˆ์‹œ์™€ ๊ฐ™์ด ๋ฐ˜๋Œ€ ์ˆœ์„œ๋กœ ์‚ฝ์ž…๋œ๋‹ค. 

 

from collections import deque

d = deque([1,2,3]) # deque ์ƒ์„ฑ

d.extendleft([4,5])

print(list(d))
# [5, 4, 1, 2, 3]

 

- rotate(n)

: n>0์˜ ๊ฒฝ์šฐ deque์˜ ์š”์†Œ๋ฅผ n์นธ์”ฉ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. n<0์˜ ๊ฒฝ์šฐ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ ˆ๋Œ€๊ฐ’๋งŒํผ ์ด๋™ํ•œ๋‹ค.

 

from collections import deque

d = deque(['a','b','c','d','e']) # deque ์ƒ์„ฑ

d.rotate(1) # ['e', 'a', 'b', 'c', 'd']
from collections import deque

d = deque(['a','b','c','d','e']) # deque ์ƒ์„ฑ

d.rotate(2) # ['d', 'e', 'a', 'b', 'c']
from collections import deque

d = deque(['a','b','c','d','e']) # deque ์ƒ์„ฑ

d.rotate(-1) # ['b', 'c', 'd', 'e', 'a']

 

3. list์™€ deque์˜ ์ฐจ์ด์ 

 

๋ฐ์ดํ„ฐ์–‘์ด ๋งŽ์„์ˆ˜๋ก list๋ณด๋‹ค ์—ฐ์‚ฐ์†๋„ ๋ฉด์—์„œ ํšจ์œจ์ ์ธ deque์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. 

 

 

 

 

โ€ป docs.python.org ์˜ collections - deque๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.