๋ชฉ์ฐจ
Python์ ๋ชจ๋ ์ค collections์ ๋ํด์ ์์๋ณด์๋ค.
์ด๋ฅผ ์ฌ์ฉํด์ List, Tuple, Dict๋ฅผ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋ค.
๊ฐ์ฒด ์ข ๋ฅ
deque, Counter, OrderedDcit, defaultdict, namedtuple
deque
- stack๊ณผ queue๋ฅผ ์ง์
- List์ ๋นํด์ ํจ์จ์ ์ธ(๋น ๋ฅธ) ์๋ฃ ์ ์ฅ ๋ฐฉ์ ์ง์!
from collections import deque
appendleft() : ๋ฆฌ์คํธ์ ์์ ์์ ์ถ๊ฐ
deque_list = deque() # ๊ฐ์ฒด ์ ์ธ
for i in range(5):
deque_list.append(i) # [0,1,2,3,4]
deque_list.appendleft(10) # ์์ ์ถ๊ฐ
deque_list
>>> deque([10, 0, 1, 2, 3, 4])
deque๋
rotate, reverse ๋ฑ์ Linked List์ ํน์ฑ์ ์ง์ํ๋ค.
๋ํ, ๊ธฐ์กด list ํํ์ ํจ์๋ฅผ ๋ชจ๋ ์ง์ํ๋ค.
rotate(n) : n๋งํผ rotate
deque_list.rotate(1) # ํ ์นธ์ฉ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ๊ธฐ
deque_list
>>> deque([4, 10, 0, 1, 2, 3])
extend() : ๋ค์ ์ถ๊ฐ
extendleft() : ์์ ์ถ๊ฐ but, ์ ๋ ฅ ์์๋ฅผ ์์๋๋ก ํ๋์ฉ ๋ฃ์ด์ค๋ค.
deque_list.extend([5,6,7]) # ๋ค์ ์ถ๊ฐ
deque_list
>>> deque([4, 10, 0, 1, 2, 3, 5, 6, 7])
deque_list.extendleft([5,6,7]) # ์์ ์ถ๊ฐ but, ์
๋ ฅ ์์๋ฅผ ์์๋๋ก ํ๋์ฉ
deque_list
>>> deque([7, 6, 5, 4, 10, 0, 1, 2, 3])
deque์ ์ฅ์ ์
๊ธฐ์กด List๋ณด๋ค ํจ์จ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค๋ ๊ฒ์ด๋ค!
ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ก ์ฒ๋ฆฌ ์๋๋ฅผ ํฅ์์ํฌ ์ ์๋ค.
์๋์ ์์๋ฅผ ๋ณด์!
from collections import deque
import time
# 1. deque
start_time = time.time()
deque_list = deque()
for i in range(1000):
for i in range(1000):
deque_list.append(i)
deque_list.pop()
print(time.time() - start_time, "seconds")
# 2. general
start_time = time.time()
just_list = []
for i in range(1000):
for i in range(1000):
just_list.append(i)
just_list.pop()
print(time.time() - start_time, "seconds")
>>> 0.08 ... seconds
>>> 0.26 ... seconds
time ๋ชจ๋์ ์ฌ์ฉํด์ ๊ฒฝ๊ณผ์๊ฐ์ ์ธก์ ํด๋ณธ ๊ฒ์ด๋ค.
deque์ general์ ์๊ฐ์ด
์์ ๊ฒฐ๊ณผ์์๋ ์ฝ 3๋ฐฐ์ ๋ ์ฐจ์ด๊ฐ ๋๋ ๊ฒ์ ์ ์ ์๋ค.
์ฆ, deque๊ฐ ๋ ํจ์จ์ ์ธ ์๋ฃ๊ตฌ์กฐ์ธ ๊ฒ์ด๋ค!
OrderedDict
- python 3.6 ๋ฏธ๋ง๊น์ง dict๋ ์ ๋ ฅํ ์์๋ฅผ ๋ณด์ฅํ์ง ์์๋ค.
๊ทธ์ ๋ฐํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ์์๋๋ก ๋ฐํํด์ฃผ๋ ๊ฐ์ฒด!
(3.6๋ถํฐ๋ ์๋ฏธ๊ฐ ์์ด์ก๋ค.)
defualtdict
- Dict type์ ๊ฐ์ ๊ธฐ๋ณธ ๊ฐ์ ์ง์ ํ์ฌ
์ ๊ท๊ฐ ์์ฑ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
from collections import defaultdict
df = defaultdict(lambda : 0) # ํจ์ํํ๋ก ๊ฐ์ ๋ฃ์ด์ฃผ์ด์ผ ํจ!
df
>>> defaultdict(<function __main__.default_value()>, {})
df["first"]
print(df)
>>> defaultdict(<function <lambda> at 0x000001A50C58F160>, {'first': 0})
์ ์ฒ๋ผ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด 0์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ง์ ์ด ๋๋ค.
df["second"] = 9
printdf)
>>> defaultdict(<function __main__.default_value()>, {'first': 0,'second': 9})
์ง์ ํ ๊ฒฝ์ฐ์๋
๊ทธ์ ๋ฐ๋ฅธ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
ํ์ฉ์์
from collections import defaultdict
df = defaultdict(lambda : 0) # ๊ธฐ๋ณธ๊ฐ 0
text = "aaabbcbbdbebabbc" # ํ
์คํธ
text = ','.join(text).split(',') # ๋ชจ๋ ๊ธ์ ๋ถ๋ฆฌ
text
>>> ['a', 'a', 'a', 'b', 'b', 'c', 'b', 'b', 'd', 'b', 'e', 'b', 'a', 'b', 'b', 'c']
for i in text: # text์ ๊ฐ์๋ฅผ ํ๋์ฉ ์ธ์ด์ค๋ค.
df[i] += 1
df
>>> {'a': 4, 'b': 8, 'c': 2, 'd': 1, 'e': 1})
์ด๋ ๊ฒ ๊ฐ์๋ฅผ ์ธ์ด์ค ๋ ์ฌ์ฉํ ์ ์๋ค.
+ OrderedDict์ sorted๋ก ์ ๋ ฌํ๊ธฐ
for a,b in OrderedDict(sorted(df.items(), key=lambda t:t[1], reverse=True)).items():
print(a,b)
>>>
b 8
a 4
c 2
d 1
e 1
Counter
- Sequence type์ ๋ฐ์ดํฐ ์์๋ค์ ๊ฐ์๋ฅผ dict ํํ๋ก ๋ฐํ
from collections import Counter
c = Counter("abcde") # ๋ฌธ์์ด
c
>>> Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1}) # ๋ฌธ์์ ์๋ฅผ ์ธ์ด์ค๋ค.
c = Counter(['a','b','c','d','e']) # ๋ฆฌ์คํธ
c
>>> Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1}) # ์์์ ์๋ฅผ ์ธ์ด์ค๋ค.
c = Counter({'a':1, 'b':2, 'c':2}) # dict
c
>>> Counter({'a': 1, 'b': 2, 'c': 2}) # ๊ทธ๋๋ก ๋์จ๋ค.
dict ํํ๋ก ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๊ด๋ จ ๋ฉ์๋๋ค๋ ์ฌ์ฉํ ์ ์๋ค.
namedtuple
- Tuple ํํ๋ก Data ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- ์ ์ฅ๋๋ data์ variable์ ์ฌ์ ์ง์ !
from collections import namedtuple
Box = namedtuple('Box', ['width','height'])
b = Box(20,40)
w,h = b
print(w, h)
>>> 20 40
print(b.width, b.height) # ๋ณ์๋ฅผ ์ด๋ ๊ฒ ์ ๊ทผํ ์๋ ์๋ค.
>>> 20 40
print(b)
>>> Box(width=20, height=40)
#(class์ ๋น์ท)
'๐ | Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Python_๋ ๊ฐ์ ๋์ ๋๋ฆฌ ํฉ์น๊ธฐ! (0) | 2022.01.19 |
---|---|
Python_Call by Object Reference (0) | 2022.01.18 |
Python_๋ฌธ์์ด ๋ค์ง๊ธฐ (0) | 2022.01.17 |
ํ์ด์ฌ ๋ฌธ๋ฒ ๊ณต๋ถ (0) | 2021.08.29 |
๋๊ธ