πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[1νŒ€/ν—ˆμ„œμ›] 7μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” - 자료ꡬ쑰

ν—ˆμ„œμ› 2023. 5. 11. 23:45

7μ°¨μ‹œ_자료ꡬ쑰_κ°•μ˜μ•ˆ.pdf
1.29MB
7μ°¨μ‹œ_자료ꡬ쑰_과제.pdf
0.18MB
7μ°¨μ‹œ_자료ꡬ쑰_κ³Όμ œλ‹΅μ•ˆ.pdf
0.22MB

자료ꡬ쑰


ν•™μŠ΅λͺ©ν‘œ

  • νŒŒμ΄μ¬μ—μ„œμ˜ μžλ£Œκ΅¬μ‘°μ— λŒ€ν•΄ μ΄ν•΄ν•œλ‹€.
  • μŠ€νƒ, 큐, νŠœν”Œ, μ„ΈνŠΈμ— λŒ€ν•΄ ν•™μŠ΅ν•œλ‹€.
  • νŒŒμ΄μ¬μ—μ„œμ˜ λ”•μ…”λ„ˆλ¦¬μ— λŒ€ν•΄ μ•Œμ•„λ³Έλ‹€.
  • 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() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€

 

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 λͺ¨λ“ˆ

νŠœν”Œμ˜ ν˜•νƒœλ‘œ 데이터 ꡬ쑰체λ₯Ό μ €μž₯ν•˜λŠ” 방법

 

πŸ™Œ λ³€μˆ˜μ— μ €μž₯된 값을 ν˜ΈμΆœν•˜λŠ” 방법!!!

  1. μš”μ†Œμ˜ 이름을 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λŠ” 방법 
  2. 인덱슀λ₯Ό μ‚¬μš©
    μΈλ±μŠ€λŠ” 이름이 λ“€μ–΄κ°„ μˆœμ„œλŒ€λ‘œ 값이 μ €μž₯λ˜μ–΄ μžˆλ‹€.