[Python] collections ๋ชจ๋“ˆ

MariGoldยท2023๋…„ 8์›” 30์ผ
0

Python

๋ชฉ๋ก ๋ณด๊ธฐ
4/11
post-thumbnail

๐Ÿ’กcollections ๋ชจ๋“ˆ๐Ÿ’ก

collections ๋ชจ๋“ˆ์€ ํŒŒ์ด์ฌ ๋ฒ”์šฉ ๋‚ด์žฅ ์ปจํ…Œ์ด๋„ˆ dict, list, set ๋ฐ tuple์— ๋Œ€ํ•œ ๋Œ€์•ˆ์„ ์ œ๊ณตํ•˜๋Š” ํŠน์ˆ˜ ์ปจํ…Œ์ด๋„ˆ ๋ฐ์ดํ„ฐํ˜•์„ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Counter, defaultdict, deque ๋“ฑ์ด ์žˆ๋‹ค.

๐Ÿ’กCounter ํด๋ž˜์Šค๐Ÿ’ก

Counter ํด๋ž˜์Šค ํŠน์ง•

(1) value๊ฐ’์— 0 ๋˜๋Š” ์Œ์ˆ˜ ๊ฐ’๋„ ํ—ˆ์šฉ
(2) ์ƒ์„ฑ ์‹œ O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง
(3) ๋ˆ„๋ฝ๋œ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด KeyError๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ๋Œ€์‹  0์„ ๋ฐ˜ํ™˜

(1) Counter(n) ํ•จ์ˆ˜

n(๋นˆ ๊ฐ์ฒด, iterableํ•œ ๊ฐ์ฒด, mapping๋œ ๊ฐ์ฒด, keyword arguemnt)์„ dictionaryํ™”ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

from collections import Counter

c1 = Counter()

>>> print(c1)
Counter()

c2 = Counter('Hello')

>>> print(c2)
Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1})

c3 = Counter({'a' : 4, 'b' : 3})

>>> print(c3)
Counter({'a': 4, 'b': 3})

c4 = Counter(a = 1, b = 3)

>>> print(c4)
Counter({'b': 3, 'a': 1})

(2) elements() ํ•จ์ˆ˜

value์˜ ๊ฐ’์ด 1์ด์ƒ์ธ key๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

from collections import Counter

c = Counter(a = 3, b = 2, c = 0)

>>> print(list(c.elements()))
['a', 'a', 'a', 'b', 'b']

(3) most_common([n])

value๊ฐ€ ํฐ key๋ถ€ํ„ฐ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ n๊ฐœ๋งŒํผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. n์ด ์ƒ๋žต๋˜๊ฑฐ๋‚˜ None์ด๋ผ๋ฉด, ๋ชจ๋“  key๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. value๊ฐ€ ๊ฐ™์€ key๋Š” ์ฒ˜์Œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

from collections import Counter

c = Counter(a = 3, b = 2, c = 0)

>>> print(c.most_common())
[('a', 3), ('b', 2), ('c', 0)]

(4) total()

์ „์ฒด value์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

from collections import Counter

c = Counter(a = 3, b = 2, c = 0)

>>> print(c.total())
5

๐Ÿ’กdefaultdict ํด๋ž˜์Šค๐Ÿ’ก

defaultdict ํด๋ž˜์Šค ํŠน์ง•

key๋ฅผ ์ง€์ •ํ•  ๋•Œ ๊ฐ’์„ ์ฃผ์ง€ ์•Š์„ ๊ฒฝ์šฐ, default๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

(1) defaultdict(n) ํ•จ์ˆ˜

n(์ž๋ฃŒํ˜•, ์ž๋ฃŒ๊ตฌ์กฐ)์„ ๊ธฐ๋ณธ์ธ์ž๋กœ ํ•˜๋Š” dictionary์ƒ์„ฑ

from collections import defaultdict

dic1 = defaultdict(int)

>>> print(dic1[0])
0

dic2 = defaultdict(float)

>>> print(dic2[0])
0.0

dic3 = defaultdict(list)

>>> print(dic3[0])
[]

๐Ÿ’กdeque ํด๋ž˜์Šค๐Ÿ’ก

deque ํด๋ž˜์Šค ํŠน์ง•

(1) ์–‘ ๋ element์— ๋Œ€ํ•ด append, pop ๊ฐ€๋Šฅ
(2) stack๊ณผ queue๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ
(3) list์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋น ๋ฆ„

(1) append(item)

queue์˜ ๋งจ ๋’ค์— item์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

from collections import deque

queue = deque()
queue.append(3)
queue.append(4)

>>> print(queue)
deque([3, 4])

(2) appendleft(item)

queue์˜ ๋งจ ์•ž์— item์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

from collections import deque

queue = deque()
queue.append(3)
queue.appendleft(4)

>>> print(queue)
deque([4, 3])

(3) pop()

queue์˜ ๋งจ ๋’ค์˜ ์›์†Œ๋ฅผ ๊บผ๋‚ธ๋‹ค.

from collections import deque

queue = deque([1,2,3])
queue.pop()

>>> print(queue)
deque([1, 2])

(4) popleft()

queue์˜ ๋งจ ์•ž์˜ ์›์†Œ๋ฅผ ๊บผ๋‚ธ๋‹ค.

from collections import deque

queue = deque([1,2,3])
queue.popleft()

>>> print(queue)
deque([2, 3])

(5) rotate(n)

n๋งŒํผ ์›์†Œ๋ฅผ ํšŒ์ „์‹œํ‚จ๋‹ค. ์‹œ๊ณ„๋ฐฉํ–ฅ ํšŒ์ „์€ ์–‘์ˆ˜, ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์€ ์Œ์ˆ˜๋ฅผ n์— ๋Œ€์ž…ํ•œ๋‹ค.

from collections import deque

queue = deque([1, 2, 3, 4, 5])
queue.rotate(2)

>>> print(queue)
deque([4, 5, 1, 2, 3])
profile
์กฐ๊ธˆ์”ฉ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ์‹ ์ž… ๊ฐœ๋ฐœ์ž :)

0๊ฐœ์˜ ๋Œ“๊ธ€