μλ£κ΅¬μ‘°
νμ΅λͺ©ν
- νμ΄μ¬μμμ μλ£κ΅¬μ‘°μ λν΄ μ΄ν΄νλ€.
- μ€ν, ν, νν, μΈνΈμ λν΄ νμ΅νλ€.
- νμ΄μ¬μμμ λμ λ리μ λν΄ μμλ³Έλ€.
- collections λͺ¨λμ λν΄ μ΄ν΄νλ€.
01 μλ£κ΅¬μ‘°μ μ΄ν΄
- μλ£κ΅¬μ‘°(data structure)μ κ°λ
λ°μ΄ν°μ νΉμ§μ κ³ λ €νμ¬ μ μ₯νλ λ°©λ²μ μλ£κ΅¬μ‘°(data structure)λΌκ³ νλ€.
⇒ μλ£κ΅¬μ‘°
νΉμ§μ΄ μλ μ 보λ₯Ό λ©λͺ¨λ¦¬μ ν¨μ¨μ μΌλ‘ μ μ₯ λ° λ°ννλ λ°©λ²μΌλ‘ λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ λ°©μ
νΉν λμ©λμΌμλ‘ λ©λͺ¨λ¦¬μ 빨리 μ μ₯νκ³ κ²μνμ¬ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©ν΄μΌ μ€ν μκ°μ μ€μΌ μ μλ€.
- νμ΄μ¬μμμ μλ£κ΅¬μ‘°
μλ£κ΅¬μ‘°μ κΈ°λ³Έ μ μ₯ λ°©μ → 리μ€νΈ(list)
02 μ€νκ³Ό ν
- μ€ν(stack)
μ€νμ μλ£κ΅¬μ‘°μ ν΅μ¬ κ°λ μ€ νλμ΄λ€. μ€νμ κ°λ¨ν νννλ©΄ ‘Last In First Out’μΌλ‘ μ μ
μ¦, λ§μ§λ§μ λ€μ΄κ° λ°μ΄ν°κ° κ°μ₯ λ¨Όμ λμ€λ ννλ‘ λ°μ΄ν°μ μ μ₯ 곡κ°μ ꡬννλ κ²μ΄λ€.
μΌλ°μ μΌλ‘ μ€νμ΄λΌκ³ νλ©΄ μ κ·Έλ¦Όμμ λ³Ό μ μλ μ¬κ°νμ μ μ₯ 곡κ°μ λ»νλ€.
μ¦ 4,10κ³Ό κ°μ λ°μ΄ν°λ₯Ό μ μ₯νλ 곡κ°μΌλ‘ 리μ€νΈμ λΉμ·νμ§λ§ μ μ₯ μμκ° λ°λλ ννλ₯Ό μ€ν μλ£κ΅¬μ‘°(stack data structure) λΌκ³ νλ€. μ€νμ λ°μ΄ν°λ₯Ό μ μ₯νλ κ²μ νΈμ , λ°μ΄ν°λ₯Ό μΆμΆνλ κ²μ ν(pop) μ΄λΌκ³ νλ€.
- μ€νμΌλ‘ λ§λ€ μ μλ νλ‘κ·Έλ¨
→ ‘μ΄μ§μ λ³νκΈ°’ νλ‘κ·Έλ¨
: 2λ‘ λλ λλ¨Έμ§ κ°μ μ€νμ νΈμν ν λ§μ§λ§μΌλ‘ λ€μ΄μ¨ κ°λΆν° νμΌλ‘ μΆμΆνκ³ μΆλ ₯
→ μ λ ₯ν ν μ€νΈλ₯Ό μμμΌλ‘ μΆλ ₯νλ νλ‘κ·Έλ¨
λ¨Όμ μ λ ₯ν ν μ€νΈλ λ³μ wordμ μ μ₯λκ³ κ·Έ κ°μ 리μ€νΈνμΌλ‘ λ³ννλ€.
κ·Έ ν κ°μ μ°¨λ‘λ‘ μΆμΆνλ©΄ μ λ ₯ν ν μ€νΈμ μμκ°μ΄ μΆλ ₯λλ€.
π‘ _ κΈ°νΈ : νμ΄μ¬μμ κ΅μ₯ν λ§μ΄ μ°μ΄λ μ½λ μ€ νλ
μΌλ°μ μΌλ‘ forλ¬Έμμ λ§μ΄ μ°μ΄λλ°, forλ¬Έμ _ κΈ°νΈκ° μμΌλ©΄ ν΄λΉ λ°λ³΅λ¬Έμμ μμ±λλ κ°μ μ½λμμ μ¬μ©νμ§ μλλ€λ λ»μ΄λ€.
→ range(len(world_list))μμ μμ±λλ κ°μ λ°λ³΅λ¬Έ λ΄μμ μ¬μ©νμ§ μμΌλ―λ‘ _λ‘ ν λΉ
- ν(queue)
νλ λ¨Όμ λ€μ΄κ° λ°μ΄ν°κ° λ¨Όμ λμ€λ ‘Fist in First Out’μ λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ°μ§λ μλ£κ΅¬μ‘°
→ μ€νμ λ°λ κ°λ
03 ννκ³Ό μΈνΈ
- νν (tuple)
리μ€νΈμ κ°μ κ°λ μ΄μ§λ§ κ°μ λ³κ²½νλ κ²μ΄ λΆκ°λ₯ν 리μ€νΈλ‘ μ΄ν΄νλ©΄ λλ€.
ννμ μ μΈκ³Ό μ¬μ©μ΄ 리μ€νΈμ μ½κ° λ€λ₯΄λ€.
- μΈνΈ (set)
(μνμ μ§ν©κ³Ό κ°λ μ μΌλ‘ μμ£Ό λΉμ·)
κ°μ μμ μμ΄ μ μ₯νλ μ€λ³΅μ λΆννλ μλ£ν
μ€λ³΅μ λΆννλ νΉμ§ λλ¬Έμ νλ‘κ·Έλλ°μμ λ§€μ° μ μ©νλ€. λνμ μΌλ‘ λ¬Έμ νλμ λ€μ΄κ° μλ λ¨μ΄ μ’ λ₯μ κ°μλ₯Ό μ λ λͺ¨λ λ¨μ΄λ₯Ό μΆμΆν ν μΈνΈλ‘ λ³ννλ©΄ λ¨μ΄ μ’ λ₯μ κ°μλ₯Ό μ½κ² νμ ν μ μλ€. νμ΄μ¬μμλ μΈνΈ μ μΈμ νλ κ²μΌλ‘ μ¬μ© ν μ μλ€.
μΈνΈλ ννκ³Ό λ€λ₯΄κ² μμ λ λ³κ²½μ΄ κ°λ₯νλ€.
μΈνΈλ₯Ό μ§μνλ ν¨μμλ μμ νλλ₯Ό μΆκ°νλ add(), μμ νλλ₯Ό μ κ±°νλ remove() λλ discard(), μλ‘μ΄ λ¦¬μ€νΈλ₯Ό κ·Έλλ‘ μΆκ°νλ update(), λͺ¨λ λ³μλ₯Ό μ§μ°λ clear() λ±μ΄ μλ€. κ°μ λͺ¨λ μμ μμ΄ μ μ₯λλ λμμ μ€λ³΅μ μ κ±°νκ³ μ μ₯λλ€.
νμ΄μ¬μ μΈνΈλ μνμ μ§ν©κ³Ό λ§μ°¬κ°μ§λ‘ λ€μν μ§ν© μ°μ°μ μ 곡νλ€. μ§ν© μ°μ°μλ κ΅μ§ν©, ν©μ§ν©, μ°¨μ§ν©μ΄ μλ€.
04 λμ λ리
- λμ λ리(Dictionary)μ κ°λ
νμ΄μ¬μ λμ λ리 ꡬ쑰λ λ°μ΄ν°μ μ μΌν ꡬλΆμμΈ ν€ (key)λΌλ μ΄λ¦μΌλ‘ κ²μν μ μκ² νκ³ , μ€μ λ°μ΄ν°λ₯Ό κ°(value)μ΄λΌλ μ΄λ¦κ³Ό μμΌλ‘ μ μ₯νμ¬ νλ‘κ·Έλλ¨Έκ° λ°μ΄ν°λ₯Ό μ½κ² μ°Ύμ μ μλλ‘ ν©λλ€.
- νμ΄μ¬μμμ λμ
λ리
- λμ λ리 μ μΈ
- λμ λ리 λ³μ = {ν€ 1:κ° 1, ν€ 2:κ° 2, ν€ 3:κ° 3, …}
- μ¬κΈ°μ μ€μν κ²μ κ°μ λ€μν μλ£νμ΄ λ€μ΄κ° μ μλ€λ κ²!!!
리μ€νΈμ κ°μ΄ ν λ²μ μ¬λ¬ λ°μ΄ν°λ₯Ό μ λ ₯νλ€κ±°λ, νν, μΈνΈμ κ°μ λ°μ΄ν°λ μ¬μ©ν μ μλ€. μ¬μ§μ΄ λμ λ리 λν μ¬μ©ν μ μλ€. - κ° νΈμΆνκΈ°
→ ν΄λΉ κ°μ ν€λ₯Ό λκ΄νΈ μμ λ£μ΄ νΈμΆ
ν€λ λ¬Έμμ΄λ‘ μ μΈν μλ μκ³ . μ μνμΌλ‘ μ μΈν μλ μλ€.
μ¬κΈ°μλ μ μνμΌλ‘ μ μΈνμΌλ―λ‘ μ μνμΌλ‘ νΈμΆ!
λ€λ§, λ³μμ μλ£νμ μ νν λͺ¨λ₯΄κ³ νΈμΆνλ€λ©΄ 리μ€νΈλ‘ μ€ν΄ν μλ μμμ μ£Όμ!!!
- μ¬ν λΉκ³Ό λ°μ΄ν° μΆκ°νκΈ°
λμ λ리μμμ μ¬ν λΉλ 리μ€νΈμμ μ¬μ©νλ λ°©μκ³Ό λ€λ₯΄μ§ μλ€.
ν€λ₯Ό μ΄μ©νμ¬ ν΄λΉ λ³μλ₯Ό νΈμΆν ν μλ‘μ΄ κ°μ ν λΉνλ©΄ λλ€.
λ°μ΄ν° μΆκ°λ μλ‘μ΄ ν€λ₯Ό μ¬μ©νμ¬ κ°μ ν λΉνλ©΄ λ¨!
ν λΉ μ κΈ°μ‘΄μ μλ ν€λΌλ©΄ ν΄λΉ κ°μ΄ λ³κ²½λκ³ , κΈ°μ‘΄μ μλ ν€λΌλ©΄ μλ‘μ΄ κ°μΌλ‘ μΆκ°λλ€.
- λμ
λ리 ν¨μ
- keys() ν¨μ
λμ λ리μ ν€λ§ μΆλ ₯ν λλ keys() ν¨μ μ¬μ©
μ΄ ν¨μλ₯Ό μ¬μ©νλ©΄ ν€κ° 리μ€νΈ ννλ‘ μΆλ ₯λλ€. - values() ν¨μ
λ°λλ‘ λμ λ리μ κ°λ§ μΆλ ₯ν λλ values() ν¨μλ₯Ό μ¬μ©νλ€. - items() ν¨μ
ν€-κ° μμ λͺ¨λ 보μ¬μ€ λλ items() ν¨μλ₯Ό μ¬μ©νλ€
- keys() ν¨μ
05 collection λͺ¨λ
from collections import deque
from collections import OrderedDict
from collections import defaultdict
from collections import Counter
from collections import namedtuple
- deque λͺ¨λ
deque λͺ¨λμ μ€νκ³Ό νλ₯Ό λͺ¨λ μ§μνλ λͺ¨λμ΄λ€.
dequeλ₯Ό μ¬μ©νκΈ° μν΄μλ 리μ€νΈμ λΉμ·ν νμμΌλ‘ λ°μ΄ν°λ₯Ό μ μ₯ν΄μΌ νλ€.
λ¨Όμ , append() ν¨μλ₯Ό μ¬μ©νλ©΄ κΈ°μ‘΄ 리μ€νΈμ²λΌ λ°μ΄ν°κ° μΈλ±μ€ λ²νΈλ₯Ό λ리면μ μμ΄κΈ° μμ
from collections import deque
deque_list = deque()
for i in range(5):
... deque_list.append(i)
...
print(deque_list)
# deque([0, 1, 2, 3, 4])
deque_list.pop()μ μνμν€λ©΄ μ€λ₯Έμͺ½ μμλΆν° νλμ© μΆμΆλλ€.
μ¦, μ€νμ²λΌ λμ€μ λ£μ κ°λΆν° νλμ© μΆμΆ
deque_list.pop()
# 4
deque_list.pop()
# 3
deque_list.pop()
# 2
deque_list
# deque([0, 1])
dequeμμ ν μ¬μ©
pop(0)μ μ λ ₯νλ©΄ μ€νλ κ² κ°μ§λ§, dequeμμλ μλνμ§ μλλ€.
→ appendleft() ν¨μλ‘ μλ‘μ΄ κ°μ μΌμͺ½λΆν° μ λ ₯νλλ‘ νμ¬ λ¨Όμ λ€μ΄κ° κ°λΆν° μΆλ ₯λ μ μλλ‘ νλ€.
from collections import deque
deque_list = deque()
for i in range(5):
... deque_list.appendleft(i)
...
print(deque_list)
# deque([4, 3, 2, 1, 0])
- deque λͺ¨λμ μ₯μ
- μ°κ²° 리μ€νΈμ νΉμ±μ μ§μ
μ°κ²° 리μ€νΈλ λ°μ΄ν°λ₯Ό μ μ₯ν λ μμμ κ°μ ν μͺ½μΌλ‘ μ°κ²°ν ν,
μμμ λ€μ κ°μ μ£Όμκ°μ μ μ₯νμ¬ λ°μ΄ν°λ₯Ό μ°κ²°νλ κΈ°λ²μ΄λ€. - κΈ°μ‘΄μ 리μ€νΈμμ μ§μνλ ν¨μ μ¬μ© κ°λ₯
- λ©λͺ¨λ¦¬μ ν¨μ¨μ μ¬μ©κ³Ό λΉ λ₯Έ μλλΌλ μΈ‘λ©΄μμ μ μ©
- μ°κ²° 리μ€νΈμ νΉμ±μ μ§μ
- OrderedDict λͺ¨λ
κ²°κ³Όλ μ»΄ν¨ν°λ§λ€ λ€λ₯Ό μ μλ€.d = {} d['x'] = 100 d['l'] = 500 d['y'] = 200 d['z'] = 300 for k, v in d.items(): print(k, v) # x 100 # l 500 # y 200 # z 300
- x, l, y, zμ μμλλ‘ ν€λ₯Ό μ μ₯νμ§λ§, κ²°κ³Όλ μ μ₯ν μμμ μκ΄μμ΄ λ€μν ννλ‘ μΆλ ₯
- μ΄λ¦ κ·Έλλ‘ μμλ₯Ό κ°μ§ λμ λ리 κ°μ²΄
νμ§λ§ OrderedDict λͺ¨λμ ν€μ μμλ₯Ό 보μ₯νλ€.
from collections import OrderedDict
d = OrderedDict()
d['x'] = 100
d['y'] = 200
d['z'] = 300
d['l'] = 500
for k, v in d.items():
print(k, v)
# x 100
# y 200
# z 300
# l 500
ν€λ₯Ό μ΄μ©νμ¬ μ£Όλ―Όλ±λ‘λ²νΈλ₯Ό λ²νΈ μμλλ‘ μ λ ¬ν ν λ°μ΄ν°λ₯Ό μΆλ ₯νλ κ²½μ°μ κ°μ΄ λμ λλ¦¬λ‘ λ°μ΄ν° μ²λ¦¬ μ ν€λ κ°μΌλ‘ λ°μ΄ν°λ₯Ό μ λ ¬ν λ κ°μ₯ λ§μ΄ μ¬μ©νλ€.
- defaultdict λͺ¨λ
λμ λ리μ λ³μλ₯Ό μμ±ν λ ν€μ κΈ°λ³Έκ°μ μ§μ νλ λ°©λ² μλ‘μ΄ ν€λ₯Ό μμ±ν λ λ³λ€λ₯Έ μ‘°μΉ μμ΄ μλ‘μ΄ κ°μ μμ±ν μ μλ€
d = dict()
print(d["first"])
μ€μ λμ λ리μμλ ν€λ₯Ό μμ±νμ§ μκ³ ν΄λΉ ν€μ κ°μ νΈμΆνλ €κ³ ν λ, μ€λ₯κ° λ°μνλ€.
μ¦, firstμ ν€κ°μ λ³λλ‘ μμ±νμ§ μμ μ± λ°λ‘ νΈμΆνμ¬ μ€λ₯κ° λ°μνλ κ²
from collections import defaultdict
d = defaultdict(lambda: 0)
print(d["first"])
# 0
→ d = defaultdict(lambda: 0) : defaultdict λͺ¨λμ μ μΈνλ©΄μ λμμ μ΄κΉκ°μ 0μΌλ‘ μ€μ ν κ²
lambda() ν¨μλ₯Ό λ°°μ°μ§ μμ μ½λλ₯Ό μ νν μ΄ν΄νκΈ° μ΄λ ΅κ² μ§λ§ ‘return 0’μ΄λΌκ³ μ΄ν΄νλ©΄ λ¨!
μ΄λ μ΄λ€ ν€κ° λ€μ΄μ€λλΌλ μ²μ κ°μ μ λΆ 0μΌλ‘ μ€μ νλ€λ λ».
μ΄μΈμλ defaultdictμ μ΄κΉκ°μ 리μ€νΈ ννλ‘λ μ€μ ν μ μλ€.
from collections import defaultdict
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
print(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
# dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
→ s λ³μμ νν λ°μ΄ν°λ€μ μ΄μ°¨μ 리μ€νΈ ννλ‘ μ μ₯νλ€.
λν d =defaultdict(list) μ½λλ dλ₯Ό defaultdict νμ μΌλ‘ μ μΈνλ©΄μ μ΄κΉκ°μ 리μ€νΈλ‘ μ μΈ
5νλΆν° forλ¬Έμ΄ μλνμ¬, λ³μ sμ κ° μμμμ ν€ κ°κ³Ό μ€μ κ°μ μΆμΆνμ¬ λ³μ μμ μΆκ°
μ€μν κ²μ λ³μ dλ deafultdict νμ μ΄λ©΄μ listκ° μ΄κΉκ°μΌλ‘ μ μΈλμκΈ° λλ¬Έμ μλ‘μ΄ ν€ κ°μ΄ μλλΌλ λ³λλ‘ μ€λ₯κ° λ°μνμ§ μλλ€. μ΄λ μΌλ°μ μΈ ‘dict’μ λΉν΄ μ½λ μλ₯Ό μ€μΌ μ μμ΄ defaultdict νμ μ κ°μ₯ ν° μ₯μ !!!
- Counter λͺ¨λ
Counter λͺ¨λμ μνμ€ μλ£νμ λ°μ΄ν° κ°μ κ°μλ₯Ό λμ
λ리 ννλ‘ λ°ννλ λ°©λ²
μ¦, 리μ€νΈλ λ¬Έμμ΄κ³Ό κ°μ μνμ€ μλ£νμ μ μ₯λ μμ μ€ κ°μ κ°μ΄ λͺ κ° μλμ§ κ·Έ κ°μλ₯Ό λ°ν
⇒ Counterλ₯Ό μ΄μ©νλ©΄ κ° λ¬Έμμ κ°μ μΈλ μμ μ λ§€μ° μ½κ² ν μ μλ€.
Counterλ λ¨μν μνμ€ μλ£νμ λ°μ΄ν°λ₯Ό μΈλ μν λ νμ§λ§, λμ λ리 ννλ ν€μλ ννμ 맀κ°λ³μλ₯Ό μ¬μ©νμ¬ Counterλ₯Ό μμ±ν μλ μλ€.
- λμ λ리 ννλ‘ Counter κ°μ²΄λ₯Ό μμ±νλ λ°©λ²
elements() ν¨μλ₯Ό μ¬μ©νμ¬ κ° μμμ κ°μλ§νΌ 리μ€νΈνμ κ²°κ³Όλ₯Ό μΆλ ₯
- ν€μλ ννμ 맀κ°λ³μλ₯Ό μ¬μ©νμ¬ Counterλ₯Ό μμ±νλ λ°©λ²
→ 맀κ°λ³μμ μ΄λ¦μ ν€λ‘, μ€μ κ°μ κ°μΌλ‘ νμ¬ Counterλ₯Ό μμ±
- Counterλ κΈ°λ³Έ μ¬μΉμ°μ° μ§μ
νμ΄μ¬μμ μ§μνλ κΈ°λ³Έ μ°μ°μΈ λ§μ , λΊμ , λ Όλ¦¬ μ°μ° λ±μ΄ κ°λ₯νλ€.
- namedtuple λͺ¨λ
ννμ ννλ‘ λ°μ΄ν° ꡬ쑰체λ₯Ό μ μ₯νλ λ°©λ²
π λ³μμ μ μ₯λ κ°μ νΈμΆνλ λ°©λ²!!!
- μμμ μ΄λ¦μ κ·Έλλ‘ μ¬μ©νλ λ°©λ²
- μΈλ±μ€λ₯Ό μ¬μ©
μΈλ±μ€λ μ΄λ¦μ΄ λ€μ΄κ° μμλλ‘ κ°μ΄ μ μ₯λμ΄ μλ€.