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

[2νŒ€/κΉ€κ°€λ¦Ό, μ΅œλ‹€μ˜ˆ] 7μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” 자료ꡬ쑰

omomirg 2023. 5. 11. 23:12

7μ°¨μ‹œ_자료ꡬ쑰_κ°•μ˜μžλ£Œ.pdf
1.23MB
7μ°¨μ‹œ_자료ꡬ쑰_과제.pdf
0.43MB

 

자료ꡬ쑰

μ°Έκ³ λ„μ„œ : 데이터 과학을 μœ„ν•œ 파이썬 ν”„λ‘œκ·Έλž˜λ°, μ΅œμƒμ² 

자료ꡬ쑰의 이해

  • 자료ꡬ쑰(data structure)의 κ°œλ…μ‹€μƒν™œμ—μ„œ μ°Ύμ•„λ³Ό 수 μžˆλŠ” λŒ€ν‘œμ μΈ 데이터 μ €μž₯ 사둀 : μ „ν™”λ²ˆν˜Έμ΄λ¦„μ„ κ°€λ‚˜λ‹€ μˆœμ„œλŒ€λ‘œ μ €μž₯, μš”μ¦˜ 많이 μ‚¬μš©ν•˜λŠ” νœ΄λŒ€μ „ν™”μ˜ μ—°λ½μ²˜μ— μ „ν™”λ²ˆν˜Έλ₯Ό μ €μž₯ν•˜κ³  λ³΄μ—¬μ£ΌλŠ” λ°©μ‹μ „ν™”λ²ˆν˜ΈλΆ€ 이외에도 μ‹€μƒν™œμ—μ„œ λ°μ΄ν„°μ˜ νŠΉμ§•μ„ λ°˜μ˜ν•˜μ—¬ μ €μž₯ν•΄μ•Ό ν•  μ •λ³΄μ˜ 예 ex. μ€ν–‰μ˜ λ²ˆν˜Έν‘œ μ²˜λ¦¬λ°©μ‹λŒ€κΈ° 인원이 1μ”© 증가. ν•΄λ‹Ή μ‚¬μš©μžκ°€ 은행 μ„œλΉ„μŠ€ μ΄μš©μ„ μ’…λ£Œν•˜λ©΄ 1μ”© κ°μ†Œ λ²ˆν˜Έν‘œμ˜ 번호 정보와 ν˜„μž¬ λŒ€κΈ° 인원을 λͺ¨λ‘ 관리해야 효율적으둜 데이터 관리 κ°€λŠ₯λ‚˜μ€‘μ— λ°°λ‹¬ν•˜λŠ” μˆ˜ν™”λ¬ΌμΌμˆ˜λ‘ 트럭 μ•ˆμͺ½μ— μŒ“κ³ , λ¨Όμ € λ°°λ‹¬ν•˜λŠ” μˆ˜ν™”λ¬ΌμΌμˆ˜λ‘ 트럭 μž…κ΅¬μͺ½μ— μ΄λ ‡κ²Œ λ°μ΄ν„°μ˜ νŠΉμ§•μ„ κ³ λ €ν•œ μ €μž₯ 방식은 맀우 μœ μš©ν•˜κ²Œ μ‚¬μš©λ˜μ–΄ 진닀.
  • 자료ꡬ쑰 : νŠΉμ§•μ΄ μžˆλŠ” 정보λ₯Ό λ©”λͺ¨λ¦¬μ— 효율적으둜 μ €μž₯ 및 λ°˜ν™˜ν•˜λŠ” λ°©λ²•μœΌλ‘œ 데이터λ₯Ό κ΄€λ¦¬ν•˜λŠ” 방식 특히 λŒ€μš©λŸ‰μΌμˆ˜λ‘ λ©”λͺ¨λ¦¬μ— 빨리 μ €μž₯ν•˜κ³  검색해 λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 μ‚¬μš©ν•΄μ•Ό μ‹€ν–‰ μ‹œκ°„μ„ 쀄일 수 있음
  • ex. 택배 μˆ˜ν™”λ¬Όμ„ νŠΈλŸ­μ— μŒ“μ„ λ•Œ μœ„μΉ˜ 정보 μ €μž₯
  • μ€ν–‰μ˜ λ²ˆν˜Έν‘œλŠ” λ²ˆν˜Έν‘œ λ‹¨λ§κΈ°μ—μ„œ μ‚¬μš©μžκ°€ λ²ˆν˜Έν‘œλ₯Ό ν•˜λ‚˜μ”© λ½‘μœΌλ©΄
  • 자료ꡬ쑰(data structure) : λ°μ΄ν„°μ˜ νŠΉμ§•μ„ κ³ λ €ν•˜μ—¬ μ €μž₯ν•˜λŠ” 방법
  • κ³Όκ±° μ „ν™”λ²ˆν˜ΈλΆ€μ—λŠ” μ „ν™”λ²ˆν˜Έλ₯Ό 효율적으둜 μ°ΎκΈ° μœ„ν•΄
  • ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ‹€λ³΄λ©΄ λ‹€μ–‘ν•œ ν˜•νƒœμ˜ 데이터λ₯Ό μ €μž₯ν•˜μ—¬ μ²˜λ¦¬ν•  λ•Œκ°€ 있음
  • νŒŒμ΄μ¬μ—μ„œμ˜ 자료ꡬ쑰자료ꡬ쑰λͺ…νŠΉμ§• 
    μŠ€νƒ (stack) λ‚˜μ€‘μ— λ“€μ–΄μ˜¨ κ°’μ•„ λ¨Όμ € λ‚˜κ°ˆ 수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” 자료ꡬ쑰 (last in first out)
    큐 (queue) λ¨Όμ € λ“€μ–΄μ˜¨ 값이 λ¨Όμ € λ‚˜κ°ˆ 수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” 자료ꡬ쑰 (first in first out)
    νŠœν”Œ (tuple) λ¦¬μŠ€νŠΈμ™€ κ°™μ§€λ§Œ λ°μ΄ν„°μ˜ 변경을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” 자료ꡬ쑰
    μ„ΈνŠΈ ( set) λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šκ³ , μˆ˜ν•™μ˜ 집합 연산을 μ§€μ›ν•˜λŠ” 자료ꡬ쑰
    λ”•μ…”λ„ˆλ¦¬  
    (dictionary) μ „ν™”λ²ˆν˜ΈλΆ€μ™€ 같이 ν‚€(key)와 κ°’(value)의 ν˜•νƒœλ‘œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 자료ꡬ쑰이며 μ—¬κΈ°μ„œ 킀값은 λ‹€λ₯Έ 데이터와 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠμŒ
    collection λͺ¨λ“ˆ μœ„μ— μ—΄κ±°λœ μ—¬λŸ¬ 자료ꡬ쑰λ₯Ό 효율적으둜 μ‚¬μš©ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜λŠ” 파이썬 λ‚΄μž₯(built-in) λͺ¨λ“ˆ
  • 자료ꡬ쑰의 κΈ°λ³Έ μ €μž₯ 방식 > list

μŠ€νƒκ³Ό 큐

  • μŠ€νƒ(stack)μŠ€νƒμ„ κ°„λ‹¨νžˆ ν‘œν˜„ν•˜λ©΄ ‘Last In First Out’으둜 μ •μ˜
    • μŠ€νƒμ˜ ν™œμš© 사둀먼저 배달해야 ν•˜λŠ” μˆ˜ν™”λ¬Όμ€ 트럭의 μž…κ΅¬μͺ½μ—, λ‚˜μ€‘μ— 배달해야 ν•˜λŠ” μˆ˜ν™”λ¬Όμ€ 트럭의 μ•ˆμͺ½μ— λ„£μ–΄μ•Ό ν•œλ‹€. μˆ˜ν™”λ¬Όμ„ ν•˜λ‚˜μ˜ λ°μ΄ν„°λ‘œ λ³Έλ‹€λ©΄ λ¨Όμ € λ“€μ–΄κ°„ μˆ˜ν™”λ¬Όλ³΄λ‹€ λ‚˜μ€‘μ— λ“€μ–΄κ°„ μˆ˜ν™”λ¬Όμ΄ λ¨Όμ € λ‚˜μ™€μ•Ό ν•˜λŠ” κ²½μš°νŒŒμ΄μ¬μ—μ„œλŠ” 리슀트λ₯Ό μ‚¬μš©ν•˜μ—¬ μŠ€νƒμ„ κ΅¬ν˜„ν•  수 μžˆλ‹€. λ¦¬μŠ€νŠΈλΌλŠ” μ €μž₯ 곡간을 λ§Œλ“  ν›„ append() ν•¨μˆ˜λ‘œ 데이터λ₯Ό μ €μž₯(push)ν•˜κ³  pop() ν•¨μˆ˜λ‘œ 데이터λ₯Ό μΆ”μΆœ(pop)ν•œλ‹€.λ¨Όμ € λ³€μˆ˜ a에 [1, 2, 3, 4, 5]κ°€ ν• λ‹Ή κ·Έ ν›„ λ³€μˆ˜ a에 10κ³Ό 20을 μΆ”κ°€ν•˜λ©΄ λ³€μˆ˜ a에 [1, 2, 3, 4, 5, 10, 20]이 ν• λ‹Ή λ‹€μŒμœΌλ‘œ pop() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ κ°€μž₯ λ§ˆμ§€λ§‰μ— μ €μž₯된 값을 μΆ”μΆœν•˜κ³  λ¦¬μŠ€νŠΈμ—μ„œ μ‚­μ œ
    • pop() ν•¨μˆ˜λ₯Ό 처음 μ‹€ν–‰ν•˜λ©΄ κ°€μž₯ λ§ˆμ§€λ§‰μ— μ €μž₯된 20이 μΆ”μΆœλ˜λ©΄μ„œ 화면에 좜λ ₯되고, λ™μ‹œμ— λ³€μˆ˜ a의 값은 [1, 2. 3. 4, 5, 10]으둜 바뀐닀. λ‹€μ‹œ pop() ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ©΄ λ§ˆμ§€λ§‰μ— μ €μž₯된 10이 μΆ”μΆœλ˜λ©΄μ„œ 화면에 좜λ ₯되고, λ™μ‹œμ— λ³€μˆ˜ a의 값은 [1, 2, 3, 4, 5]둜 바뀐닀.
    • μˆ˜ν™”λ¬Όκ³Ό λΉ„μŠ·ν•œ κ°œλ…μ˜ 데이터가 μžˆλ‹€λ©΄ μŠ€νƒμœΌλ‘œ μ €μž₯ν–ˆμ„ λ•Œ μ’€ 더 μ‰½κ²Œ 데이터λ₯Ό μΆ”μΆœ
    • 택배 μˆ˜ν™”λ¬Όμ„ μ €μž₯ν•˜λŠ” 방식
    • μŠ€νƒμœΌλ‘œ λ§Œλ“€ 수 μžˆλŠ” ν”„λ‘œκ·Έλž¨: 2둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ 값을 μŠ€νƒμ— ν‘Έμ‹œν•œ ν›„ λ§ˆμ§€λ§‰μœΌλ‘œ λ“€μ–΄μ˜¨ κ°’λΆ€ν„° 팝으둜 μΆ”μΆœν•˜κ³  좜λ ₯
      word = input("Input a word: ")
      word_list = list(word)
      print(word_list)
      
      result = []
      for _ in range(len(word_list)):
          result.append(word_list.pop())
      
      print(result)
      print(word[::-1])
      
      일반적으둜 forλ¬Έμ—μ„œ 많이 쓰이며 for문에 _ κΈ°ν˜Έκ°€ 있으면 ν•΄λ‹Ή λ°˜λ³΅λ¬Έμ—μ„œ μƒμ„±λ˜λŠ” 값은 μ½”λ“œμ—μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” λœ»μ΄λ‹€range(len(world_list))μ—μ„œ μƒμ„±λ˜λŠ” 값을 반볡문 λ‚΄μ—μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ _둜 ν• λ‹Ή
    • </aside>
    • <aside> πŸ“Œ _ 기호 : νŒŒμ΄μ¬μ—μ„œ ꡉμž₯히 많이 μ“°μ΄λŠ” μ½”λ“œ 쀑 ν•˜λ‚˜
    • λ¨Όμ € μž…λ ₯ν•œ ν…μŠ€νŠΈλŠ” λ³€μˆ˜ word에 μ €μž₯되고 κ·Έ 값을 λ¦¬μŠ€νŠΈν˜•μœΌλ‘œ λ³€ν™˜ν•œλ‹€. κ·Έ ν›„ 값을 μ°¨λŒ€λ‘œ μΆ”μΆœν•˜λ©΄ μž…λ ₯ν•œ ν…μŠ€νŠΈμ˜ μ—­μˆœκ°’μ΄ 좜λ ₯λœλ‹€
    • (2) μž…λ ₯ν•œ ν…μŠ€νŠΈλ₯Ό μ—­μˆœμœΌλ‘œ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨
    • (1) ‘μ΄μ§„μˆ˜ λ³€ν™˜κΈ°’ ν”„λ‘œκ·Έλž¨
  • 4,10κ³Ό 같은 데이터λ₯Ό μ €μž₯ν•˜λŠ” κ³΅κ°„μœΌλ‘œ λ¦¬μŠ€νŠΈμ™€ λΉ„μŠ·ν•˜μ§€λ§Œ μ €μž₯ μˆœμ„œκ°€ λ°”λ€ŒλŠ” ν˜•νƒœλ₯Ό μŠ€νƒ 자료ꡬ쑰(stack data structure) λΌκ³  ν•œλ‹€. μŠ€νƒμ— 데이터λ₯Ό μ €μž₯ν•˜λŠ” 것을 ν‘Έμ‹œ , 데이터λ₯Ό μΆ”μΆœν•˜λŠ” 것을 νŒ(pop)이라고 ν•œλ‹€.
  • 일반적으둜 μŠ€νƒμ΄λΌκ³  ν•˜λ©΄ μœ„ κ·Έλ¦Όμ—μ„œ λ³Ό 수 μžˆλŠ” μ‚¬κ°ν˜•μ˜ μ €μž₯ 곡간을 λœ»ν•œλ‹€
  • 즉, λ§ˆμ§€λ§‰μ— λ“€μ–΄κ°„ 데이터가 κ°€μž₯ λ¨Όμ € λ‚˜μ˜€λŠ” ν˜•νƒœλ‘œ λ°μ΄ν„°μ˜ μ €μž₯ 곡간 κ΅¬ν˜„
  • μŠ€νƒμ€ 자료ꡬ쑰의 핡심 κ°œλ… 쀑 ν•˜λ‚˜
  • 큐(queue)νλŠ” λ¨Όμ € λ“€μ–΄κ°„ 데이터가 λ¨Όμ € λ‚˜μ˜€λŠ” ‘Fist in First Oiitmo’의 λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ°€μ§€λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€.
    • 큐의 ν™œμš© 사둀먼저 온 μ‚¬λžŒμ΄ μ•žμ˜ λ²ˆν˜Έν‘œλ₯Ό 뽑고, λ²ˆν˜Έκ°€ λΉ λ₯Έ μ‚¬λžŒμ΄ λ¨Όμ € μ„œλΉ„μŠ€λ₯Ό λ°›λŠ” κ΅¬μ‘°μŠ€νƒμ€ λ©”λͺ¨λ¦¬κ°€ μ‹œμž‘ν•˜λŠ” 지점이 κ³ μ •λ˜μ–΄ μžˆμ§€λ§Œ, νλŠ” μ²˜μŒμ— 값이 μ €μž₯λ˜λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ 값이 μ‚¬μš©λ¨μ— 따라 계속 λ°”λ€œ But νŒŒμ΄μ¬μ—μ„œλŠ” μ΄λŸ¬ν•œ 뢀뢄이 μžλ™μœΌλ‘œ κ΅¬ν˜„λ˜λ―€λ‘œ 어렡지 μ•Šκ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.기본적으둜 μŠ€νƒμ˜ κ΅¬ν˜„κ³Ό κ°™μŒμ¦‰, pop() ν•¨μˆ˜κ°€ 리슀트의 λ§ˆμ§€λ§‰ 값을 κ°€μ Έμ˜¨λ‹€κ³  ν•˜λ©΄ pop(0)은 맨 처음 값을 κ°€μ Έμ˜¨λ‹€λŠ” 뜻
    • a = [1, 2, 3, 4, 5] a.append(10) # a = [1, 2, 3, 4, 5, 10] a.append(20) # a = [1, 2, 3, 4, 5, 10, 20] a.pop(0) # 1 a.pop(0) # 2
    • pop() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ μΈλ±μŠ€κ°€ 0번째인 값을 μ“΄λ‹€λŠ” 의미둜 pop(0)을 μ‚¬μš©ν•˜λ©΄ λœλ‹€.
    • νŒŒμ΄μ¬μ—μ„œ 큐λ₯Ό κ΅¬ν˜„ν•˜λŠ” 것은 맀우 κ°„λ‹¨ν•˜λ‹€.
    • λ©”λͺ¨λ¦¬ κ°œλ…μœΌλ‘œ λ³Ό λ•Œ νλŠ” μŠ€νƒλ³΄λ‹€ κ΅¬ν˜„μ΄ 쑰금 더 볡작
    • μ€ν–‰μ—μ„œ λŒ€κΈ° λ²ˆν˜Έν‘œλ₯Ό 뽑을 λ•Œ 번호λ₯Ό μ €μž₯ν•˜λŠ” 방식
  • μŠ€νƒμ˜ λ°˜λŒ€ κ°œλ…

νŠœν”Œκ³Ό μ„ΈνŠΈ

  • νŠœν”Œ (tuple)
    t = (1, 2, 3)
    print(t +1 , t * 2)
    # (1, 2, 3, 1, 2, 3) (1, 2, 3, 1, 2, 3)
    len(t)
    # 3
    
    첫 번째 쀄 : νŠœν”Œ μ„ μ–Έ λͺ…λ Ήλ¦¬μŠ€νŠΈλŠ” λŒ€κ΄„ν˜Έ μ‚¬μš© but μ„ μ–Έ 외에 μ—¬λŸ¬ 가지 연산은 λ¦¬μŠ€νŠΈμ™€ 같은 방식이닀.νŠœν”Œ κ°„μ˜ λ§μ…ˆ, κ³±μ…ˆ 그리고 len() ν•¨μˆ˜μ™€ 같이 λ¦¬μŠ€νŠΈν˜• 데이터에 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  ν•¨μˆ˜ μ‚¬μš©νŠœν”Œμ˜ 값은 λ§ˆμŒλŒ€λ‘œ λ³€κ²½ν•  수 μ—†λ‹€<aside> ❓ λ§Œμ•½ 값이 ν•˜λ‚˜λ°–μ— μ—†λ‹€λ©΄?t = (1)κ³Ό 같은 μ½”λ“œκ°€ 생각날 μˆ˜λ„ μžˆλ‹€.λ”°λΌμ„œ 값이 ν•˜λ‚˜μΌ λ•ŒλŠ” t = (1, )와 같이 λ°˜λ“œμ‹œ 콀마(,)λ₯Ό λΆ™μ—¬ tκ°€ νŠœν”Œμž„μ„ μ„ μ–Έν•΄μ•Ό ν•œλ‹€.
    • νŠœν”Œμ˜ ν™œμš© μ‚¬λ‘€μ΄λ•Œ λ°˜ν™˜ν•΄μ£ΌλŠ” νƒ€μž…μ„ νŠœν”Œλ‘œ μ„ μ–Έν•˜λ©΄ λ°›μ•„μ„œ μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ΄ λ§ˆμŒλŒ€λ‘œ 데이터λ₯Ό λͺ»λ°”κΏˆν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ΄λŸ¬ν•œ 이해 없이 λ§ˆμŒλŒ€λ‘œ 값을 λ³€κ²½ν•˜λŠ” 것을 방지
    • κ·Έλ ‡λ‹€λ©΄ λ°”λ€Œλ©΄ μ•ˆ λ˜λŠ” λ°μ΄ν„°μ—λŠ” μ–΄λ–€ 것이 μžˆμ„κΉŒ? : ν•™λ²ˆμ΄λ‚˜ 이름, μ£Όλ―Όλ“±λ‘λ²ˆν˜Έμ™€ 같이 λ³€κ²½λ˜λ©΄ μ•ˆ λ˜λŠ” 정보
    • ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ‹€ 보면 μ—¬λŸ¬ μ‚¬λžŒκ³Ό ν•¨κ»˜ μž‘μ—…ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€. μžμ‹ μ΄ ν•˜λ‚˜μ˜ ν•¨μˆ˜λ§Œ λ§Œλ“€κ³ , λ‹€λ₯Έ μ‚¬λžŒμ΄ κ·Έ ν•¨μˆ˜μ˜ 결과값을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°λ„ λ°œμƒ
  • but νŒŒμ΄μ¬μ€ μ΄λ ‡κ²Œ μ„ μ–Έν•  경우 t = 1둜 μ΄ν•΄ν•œλ‹€. t = (5 + 2)* 2와 같이 μ—°μ‚°μ—μ„œ μ‚¬μš©ν•˜λŠ” κ΄„ν˜Έλ‘œ μ΄ν•΄ν•˜λŠ” 것이닀.
  • </aside>
  • λ§Œμ•½ νŠœν”Œμ˜ 값을 λ³€κ²½ν•˜λ €κ³  ν•˜λ©΄ 였λ₯˜ λ°œμƒ
  • νŠœν”Œκ³Ό 리슀트의 μœ μΌν•œ 큰 차이:
  • λ¦¬μŠ€νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” μ—°μ‚°, 인덱싱, μŠ¬λΌμ΄μ‹±μ΄ λͺ¨λ‘ λ™μΌν•˜κ²Œ 적용 :
  • νŠœν”Œμ€ κ΄„ν˜Έλ₯Ό μ΄μš©ν•˜μ—¬ t = (1, 2, 3)κ³Ό 같은 ν˜•νƒœλ‘œ μ„ μ–Έ
  • λ¦¬μŠ€νŠΈμ™€ 같은 κ°œλ…μ΄μ§€λ§Œ 값을 λ³€κ²½ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•œ 리슀트둜 μ΄ν•΄ν•˜λ©΄ λœλ‹€. νŠœν”Œμ€ μ„ μ–Έκ³Ό μ‚¬μš©μ΄ λ¦¬μŠ€νŠΈμ™€ μ•½κ°„ λ‹€λ₯΄λ‹€.
  • μ„ΈνŠΈ (set)μˆ˜ν•™μ˜ 집합과 κ°œλ…μ μœΌλ‘œ μ•„μ£Ό λΉ„μŠ·νŒŒμ΄μ¬μ—μ„œλŠ” μ„ΈνŠΈ 선언을 ν•˜λŠ” κ²ƒμœΌλ‘œ μ‚¬μš© ν•  수 μžˆλ‹€.set() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¦¬μŠ€νŠΈλ‚˜ νŠœν”Œμ˜ 데이터λ₯Ό λ„£μœΌλ©΄ ν•΄λ‹Ή 값이 μ„ΈνŠΈ ν˜•νƒœλ‘œ λ³€ν™˜λœλ‹€.μ„ΈνŠΈλŠ” νŠœν”Œκ³Ό λ‹€λ₯΄κ²Œ μ‚­μ œλ‚˜ 변경이 κ°€λŠ₯ν•˜λ‹€.μ„ΈνŠΈλ₯Ό μ§€μ›ν•˜λŠ” ν•¨μˆ˜μ—λŠ” μ›μ†Œ ν•˜λ‚˜λ₯Ό μΆ”κ°€ν•˜λŠ” add(),μƒˆλ‘œμš΄ 리슀트λ₯Ό κ·ΈλŒ€λ‘œ μΆ”κ°€ν•˜λŠ” update(), λͺ¨λ“  λ³€μˆ˜λ₯Ό μ§€μš°λŠ” clear() λ“±μ΄ μžˆλ‹€. 값은 λͺ¨λ‘ μˆœμ„œ 없이 μ €μž₯λ˜λŠ” λ™μ‹œμ— 쀑볡을 μ œκ±°ν•˜κ³  μ €μž₯λœλ‹€.
    • 합집합은 두 μ§‘ν•©μ˜ 쀑볡값을 μ œκ±°ν•˜κ³  ν•©μΉ˜λŠ” μ—°μ‚°
    s1.union(s2) λ₯Ό 톡해 s1κ³Ό s2의 합집합이 좜λ ₯λœλ‹€. 합집합은 union()κ³Ό 같은 ν•¨μˆ˜λ‘œλ„ ν‘œν˜„ν•  수 μžˆμ§€λ§Œ, | κΈ°ν˜Έλ‘œλ„ μΆ”μΆœν• μˆ˜ μžˆλ‹€. (s1 | s2의 κ²°κ³Όκ°€ s1.union(s2)와 동일)
    • ꡐ집합은 두 집합 μ–‘μͺ½μ— λͺ¨λ‘ ν¬ν•¨λœ κ°’λ§Œ μΆ”μΆœν•˜λŠ” μ—°μ‚°
    s1κ³Ό s2λŠ” λͺ¨λ‘ 3, 4, 5λ₯Ό μ›μ†Œλ‘œ 가지고 μžˆλ‹€. 이 경우, s1.intersection(s2)λ‚˜ s1 & s2둜 ꡐ집합을 μΆ”μΆœν•  수 μžˆλ‹€. (κ΅μ§‘ν•©μ˜ κ°œλ…μ€ ifλ¬Έμ—μ„œ λ°°μ› λ˜ and 쑰건의 κ°œλ…κ³Ό λΉ„μŠ·)
    • 차집합은 μ•žμ— μžˆλŠ” 집합 s1의 μ›μ†Œ 쀑 s2에 ν¬ν•¨λœ μ›μ†Œλ₯Ό μ œκ±°ν•˜λŠ” 연산이닀.
    즉, siμ—μ„œ si κ³Ό s2의 ꡐ집합 μ›μ†Œλ₯Ό μ‚­μ œν•˜λ©΄ λœλ‹€.
  • s1은 [1, 2, 3, 4, 5]λ₯Ό 가지고 μžˆμœΌλ―€λ‘œ [3, 4, 5]λ₯Ό μ œκ±°ν•˜λ©΄ [1, 2]만 λ‚¨λŠ”λ‹€. s1.difference(s2) λ˜λŠ” s1 - s2둜 차집합을 μΆ”μΆœν•  수 μžˆλ‹€.
  • s1 =set([1, 2, 3, 4, 5]) s2 =set([3, 4, 5, 6 ,7]) s1.union(s2) # s1κ³Ό s2의 합집합 # {1, 2, 3, 4, 5, 6, 7} s1| s2 #set([1,2,3,4,5,6,7]) # {1, 2, 3, 4, 5, 6, 7} s1.intersection(s2) # s1κ³Ό s2의 ꡐ집합 # {3, 4, 5} si & s2 # set([3, 4, 5]) # {3, 4, 5} s1.difference(s2) #s1κ³Ό s2의 차집합 # {1, 2} s1 - s2 # set([1, 2]) # {1, 2}
  • 파이썬의 μ„ΈνŠΈλŠ” μˆ˜ν•™μ˜ 집합과 λ§ˆμ°¬κ°€μ§€λ‘œ λ‹€μ–‘ν•œ μ§‘ν•© 연산을 μ œκ³΅ν•œλ‹€. 집합 μ—°μ‚°μ—λŠ” κ΅μ§‘ν•©, ν•©μ§‘ν•©, μ°¨μ§‘합이 μžˆλ‹€.
  • μ›μ†Œ ν•˜λ‚˜λ₯Ό μ œκ±°ν•˜λŠ” remove() λ˜λŠ” discard(),
  • s # {1, 2, 3} s.add(1) # 1을 μΆ”κ°€ν•˜λŠ” λͺ…λ Ήμ΄μ§€λ§Œ 쀑볡 λΆˆν—ˆλ‘œ μΆ”κ°€λ˜μ§€ μ•ŠμŒ s # {1, 2, 3} s.remove(1) # 1 μ‚­μ œ s # {2, 3} s.update([1, 4, 5, 6, 7]) # [1, 4, 5, 6, 7] μΆ”κ°€ s # {1, 2, 3, 4, 5, 6, 7} s.discard(3) #3 μ‚­μ œ s # {1, 2, 4, 5, 6, 7} s.clear() # λͺ¨λ“  μ›μ†Œ μ‚­μ œ s # set()
  • [1, 2, 3, 1, 2, 3] (λ¦¬μŠ€νŠΈν˜•)을 μ„ΈνŠΈλ‘œ λ³€ν™˜ν•˜λ©΄, 쀑볡을 μ œκ±°ν•œ ν›„ {1, 2, 3}으둜 λ³€ν™˜λ˜μ–΄ 좜λ ₯
  • s=set([1,2,3,1,2,3]) # set()ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 1,2,3을 μ„ΈνŠΈ 객체둜 생성 s # {1, 2, 3}
  • 쀑볡을 λΆˆν—ˆν•˜λŠ” νŠΉμ§• λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 맀우 μœ μš©ν•˜λ‹€. λŒ€ν‘œμ μœΌλ‘œ λ¬Έμ„œ ν•˜λ‚˜μ— λ“€μ–΄κ°€ μžˆλŠ” 단어 μ’…λ₯˜μ˜ 개수λ₯Ό μ…€ λ•Œ λͺ¨λ“  단어λ₯Ό μΆ”μΆœν•œ ν›„ μ„ΈνŠΈλ‘œ λ³€ν™˜ν•˜λ©΄ 단어 μ’…λ₯˜μ˜ 개수λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€.
  • 값을 μˆœμ„œ 없이 μ €μž₯ν•˜λ˜ 쀑볡을 λΆˆν—ˆν•˜λŠ” μžλ£Œν˜•

λ”•μ…”λ„ˆλ¦¬

  • λ”•μ…”λ„ˆλ¦¬(Dictionary)의 κ°œλ…λ°μ΄ν„°μ˜ μœ μΌν•œ κ΅¬λΆ„μžμΈ ν‚€ (key)λΌλŠ” μ΄λ¦„μœΌλ‘œ 검색할 수 있게 ν•˜κ³ ,
  • μ‹€μ œ 데이터λ₯Ό κ°’(value)μ΄λΌλŠ” 이름과 쌍으둜 μ €μž₯ν•˜μ—¬ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 데이터λ₯Ό μ‰½κ²Œ 찾을 수 μžˆλ„λ‘ ν•œλ‹€
  • 파이썬의 λ”•μ…”λ„ˆλ¦¬ κ΅¬μ‘°λŠ”
  • νŒŒμ΄μ¬μ—μ„œμ˜ λ”•μ…”λ„ˆλ¦¬
    • λ”•μ…”λ„ˆλ¦¬ μ„ μ–Έ
    μ€‘κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 킀와 값을 쌍으둜 κ΅¬μ„±μ—¬κΈ°μ„œ μ€‘μš”ν•œ 것은 값에 λ‹€μ–‘ν•œ μžλ£Œν˜•μ΄ λ“€μ–΄κ°ˆ 수 μžˆλ‹€λŠ” 것 λ¦¬μŠ€νŠΈμ™€ 같이 ν•œ λ²ˆμ— μ—¬λŸ¬ 데이터λ₯Ό μž…λ ₯ν•œλ‹€κ±°λ‚˜, νŠœν”Œ, μ„ΈνŠΈμ™€ 같은 데이터도 μ‚¬μš©ν•  수 μžˆλ‹€.
    • μ‚¬μš© 예
    ν•™λ²ˆ(ν‚€)이름(κ°’)
    2020111753 Jiyoung
    202111175 Jaeyeon
    202211175 Jihyeon
    202311175 Jeongyeon
    student_info = (2020111753:'Jiyoung', 2021111753:'Jaeyeon', 2022111753:'Jihyeon', 2023111753:'Jeongyeon'}
    
    student_infoλΌλŠ” λ³€μˆ˜λ₯Ό λ¨Όμ € μ„ μ–Έν•œ ν›„, ν•΄λ‹Ή λ³€μˆ˜μ— (ν‚€:κ°’) ν˜•νƒœλ‘œ 값을 μž…λ ₯
    • κ°’ ν˜ΈμΆœν•˜κΈ°
    student_info λ”•μ…”λ„ˆλ¦¬μ—μ„œ νŠΉμ •ν•œ κ°’λ§Œ ν˜ΈμΆœν•΄λ‹Ή κ°’μ˜ ν‚€λ₯Ό λŒ€κ΄„ν˜Έ μ•ˆμ— λ„£μ–΄ 호좜 ν‚€λŠ” λ¬Έμžμ—΄λ‘œ μ„ μ–Έν•  μˆ˜λ„ 있고. μ •μˆ˜ν˜•μœΌλ‘œ μ„ μ–Έν•  μˆ˜λ„ μžˆλ‹€.
    • μž¬ν• λ‹Ήκ³Ό 데이터 μΆ”κ°€ν•˜κΈ°
    student_info[2023111753] = 'Jiwon'
    student_info[2023111753]
    #'Jiwon'
    student_info[2019111753] = 'Jaehyeon'
    student_info
    # {2020111753:'Jiyoung', 2021111753:'Jaeyeon', 2022111753:'Jihyeon', 2023111753:'Jiwon', 2019111753:'Jaehyeon'}
    
    λ”•μ…”λ„ˆλ¦¬μ—μ„œμ˜ μž¬ν• λ‹Ήλ„ λ¦¬μŠ€νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” 방식과 λ‹€λ₯΄μ§€ μ•Šλ‹€. ν‚€λ₯Ό μ΄μš©ν•˜μ—¬ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό ν˜ΈμΆœν•œ ν›„ μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜λ©΄ λœλ‹€. 데이터 좔가도 μƒˆλ‘œμš΄ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 ν• λ‹Ήν•˜λ©΄ 됨
  • ν• λ‹Ή μ‹œ 기쑴에 있던 킀라면 ν•΄λ‹Ή 값이 λ³€κ²½λ˜κ³ , 기쑴에 μ—†λ˜ 킀라면 μƒˆλ‘œμš΄ κ°’μœΌλ‘œ μΆ”κ°€λœλ‹€.
  • μ—¬κΈ°μ„œλŠ” μ •μˆ˜ν˜•μœΌλ‘œ μ„ μ–Έν–ˆμœΌλ―€λ‘œ μ •μˆ˜ν˜•μœΌλ‘œ 호좜 ⚠️ λ³€μˆ˜μ˜ μžλ£Œν˜•μ„ μ •ν™•νžˆ λͺ¨λ₯΄κ³  ν˜ΈμΆœν•œλ‹€λ©΄ 리슀트둜 μ˜€ν•΄ν•  μˆ˜λ„ 있음
  • student_info[2022111753] # 'Jihyeon'
  • 심지어 λ”•μ…”λ„ˆλ¦¬ λ˜ν•œ μ‚¬μš©ν•  수 μžˆλ‹€.
  • λ”•μ…”λ„ˆλ¦¬ λ³€μˆ˜ = {ν‚€ 1:κ°’ 1, ν‚€ 2:κ°’ 2, ν‚€ 3:κ°’ 3, …}
  • λ”•μ…”λ„ˆλ¦¬ ν•¨μˆ˜
    country_code = {} # λ”•μ…”λ„ˆλ¦¬ 생성
    country_code = {"America":1, "Korea":82, "China":86, "Japan":81}
    country_code
    # {'America':1, 'Korea':82, 'China':86, 'Japan':81}
    
    • keys() ν•¨μˆ˜ λ”•μ…”λ„ˆλ¦¬μ˜ ν‚€λ§Œ 좜λ ₯ν•  λ•ŒλŠ” keys() ν•¨μˆ˜ μ‚¬μš© 이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ ν‚€κ°€ 리슀트 ν˜•νƒœλ‘œ 좜λ ₯λœλ‹€.
    country_code.keys() # λ”•μ…”λ„ˆλ¦¬μ˜ ν‚€λ§Œ 좜λ ₯
    # dict_keys(['America', 'Korea', 'China', 'Japan'])
    
    • values() ν•¨μˆ˜ λ°˜λŒ€λ‘œ λ”•μ…”λ„ˆλ¦¬μ˜ κ°’λ§Œ 좜λ ₯ν•  λ•ŒλŠ” values() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€
    country_code["German"] = 49 # λ”•μ…”λ„ˆλ¦¬ μΆ”κ°€
    country code
    # {'America': 1, 'Korea': 82, 'China': 86, 'Japan': 81, 'German': 49}
    country_code.values() # λ”•μ…”λ„ˆλ¦¬μ˜ κ°’λ§Œ 좜λ ₯
    # dict_values([1, 82, 86, 81, 49])
    
    • items() ν•¨μˆ˜ ν‚€-κ°’ μŒμ„ λͺ¨λ‘ 보여쀄 λ•ŒλŠ” items() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€
    country_code.items() # λ”•μ…”λ„ˆλ¦¬ 데이터 좜λ ₯
    # dict_items([('America', 1), ('Korea', 82), ('China', 86), ('Japan', 81), ('German', 49)])
    
  • κ΅­κ°€λͺ…κ³Ό κ΅­κ°€ μ „ν™”λ²ˆν˜Έλ₯Ό λ¬Άμ–΄ λ³΄μ—¬μ£ΌλŠ” μ½”λ“œ μž‘μ„±

collection λͺ¨λ“ˆ

from collections import deque
from collections import OrderedDict
from collections import defaultdict
from collections import Counter
from collections import namedtuple
  • deque λͺ¨λ“ˆλ¨Όμ €, append() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ κΈ°μ‘΄ 리슀트처럼 데이터가 인덱슀 번호λ₯Ό λŠ˜λ¦¬λ©΄μ„œ μŒ“μ΄κΈ° μ‹œμž‘deque_list.pop()을 μˆ˜ν–‰μ‹œν‚€λ©΄ 였λ₯Έμͺ½ μš”μ†ŒλΆ€ν„° ν•˜λ‚˜μ”© μΆ”μΆœλœλ‹€. μŠ€νƒμ²˜λŸΌ λ‚˜μ€‘μ— 넣은 κ°’λΆ€ν„° ν•˜λ‚˜μ”© μΆ”μΆœdequeμ—μ„œ 큐 μ‚¬μš© pop(0)을 μž…λ ₯ν•˜λ©΄ 싀행될 것 κ°™μ§€λ§Œ, dequeμ—μ„œλŠ” μž‘λ™ x
    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 λͺ¨λ“ˆμ˜ μž₯점
      • μ—°κ²° 리슀트의 νŠΉμ„±μ„ 지원 μ—°κ²° λ¦¬μŠ€νŠΈλŠ” 데이터λ₯Ό μ €μž₯ν•  λ•Œ μš”μ†Œμ˜ 값을 ν•œ μͺ½μœΌλ‘œ μ—°κ²°ν•œ ν›„, μš”μ†Œμ˜ λ‹€μŒ κ°’μ˜ μ£Όμ†Œκ°’μ„ μ €μž₯ν•˜μ—¬ 데이터λ₯Ό μ—°κ²°ν•˜λŠ” 기법이닀.
      • 기쑴의 λ¦¬μŠ€νŠΈμ—μ„œ μ§€μ›ν•˜λŠ” ν•¨μˆ˜ μ‚¬μš© κ°€λŠ₯
      • λ©”λͺ¨λ¦¬μ˜ 효율적 μ‚¬μš©κ³Ό λΉ λ₯Έ μ†λ„λΌλŠ” μΈ‘λ©΄μ—μ„œ 유용
  • appendleft() ν•¨μˆ˜λ‘œ μƒˆλ‘œμš΄ 값을 μ™Όμͺ½λΆ€ν„° μž…λ ₯ν•˜λ„λ‘ ν•˜μ—¬ λ¨Όμ € λ“€μ–΄κ°„ κ°’λΆ€ν„° 좜λ ₯될 수 μžˆλ„λ‘ ν•œλ‹€.
  • deque_list.pop() # 4 deque_list.pop() # 3 deque_list.pop() # 2 deque_list # deque([0, 1])
  • 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 λͺ¨λ“ˆμ€ μŠ€νƒκ³Ό 큐λ₯Ό λͺ¨λ‘ μ§€μ›ν•˜λŠ” λͺ¨λ“ˆ 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
    
    κ²°κ³ΌλŠ” μ»΄ν“¨ν„°λ§ˆλ‹€ λ‹€λ₯Ό 수 있음
    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
    
    ν‚€λ₯Ό μ΄μš©ν•˜μ—¬ μ£Όλ―Όλ“±λ‘λ²ˆν˜Έλ₯Ό 번호 μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•œ ν›„ 데이터λ₯Ό 좜λ ₯ν•˜λŠ” κ²½μš°μ™€ 같이 λ”•μ…”λ„ˆλ¦¬λ‘œ 데이터 처리 μ‹œ ν‚€λ‚˜ κ°’μœΌλ‘œ 데이터λ₯Ό μ •λ ¬ν•  λ•Œ κ°€μž₯ 많이 μ‚¬μš©
  • x, l, y, z의 μˆœμ„œλŒ€λ‘œ ν‚€λ₯Ό μ €μž₯ν–ˆμ§€λ§Œ, κ²°κ³ΌλŠ” μ €μž₯ν•œ μˆœμ„œμ™€ 상관없이 λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ 좜λ ₯ ν•˜μ§€λ§Œ OrderedDict λͺ¨λ“ˆμ€ ν‚€μ˜ μˆœμ„œλ₯Ό 보μž₯ν•œλ‹€.
  • 이름 κ·ΈλŒ€λ‘œ μˆœμ„œλ₯Ό 가진 λ”•μ…”λ„ˆλ¦¬ 객체
  • defaultdict λͺ¨λ“ˆ
    d = dict()
    print(d["first"])
    
    μ‹€μ œ λ”•μ…”λ„ˆλ¦¬μ—μ„œλŠ” ν‚€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  ν•΄λ‹Ή ν‚€μ˜ 값을 ν˜ΈμΆœν•˜λ €κ³  ν•  λ•Œ, 였λ₯˜κ°€ λ°œμƒν•œλ‹€.
    from collections import defaultdict
    
    d = defaultdict(lambda: 0)
    print(d["first"])
    # 0
    
    d = defaultdict(lambda: 0) : defaultdict λͺ¨λ“ˆμ„ μ„ μ–Έν•˜λ©΄μ„œ λ™μ‹œμ— μ΄ˆκΉƒκ°’μ„ 0으둜 μ„€μ •ν•œ κ²ƒμ΄λŠ” μ–΄λ–€ ν‚€κ°€ λ“€μ–΄μ˜€λ”λΌλ„ 처음 값은 μ „λΆ€ 0으둜 μ„€μ •ν•œλ‹€λŠ” 뜻. 이외에도 defaultdict의 μ΄ˆκΉƒκ°’μ€ 리슀트 ν˜•νƒœλ‘œλ„ μ„€μ •ν•  수 μžˆλ‹€.s λ³€μˆ˜μ— νŠœν”Œ 데이터듀을 이차원 리슀트 ν˜•νƒœλ‘œ μ €μž₯ν–ˆλ‹€.μ΄λŠ” 일반적인 ‘dict’에 λΉ„ν•΄ μ½”λ“œ 수λ₯Ό 쀄일 수 μžˆμ–΄ defaultdict νƒ€μž…μ˜ κ°€μž₯ 큰 μž₯점
  • λ˜ν•œ d =defaultdict(list) μ½”λ“œλŠ” dλ₯Ό defaultdict νƒ€μž…μœΌλ‘œ μ„ μ–Έν•˜λ©΄μ„œ μ΄ˆκΉƒκ°’μ„ λ¦¬μŠ€νŠΈλ‘œ μ„ μ–Έ 5ν–‰λΆ€ν„° for문이 μž‘λ™ν•˜μ—¬, λ³€μˆ˜ s의 각 μš”μ†Œμ—μ„œ ν‚€ κ°’κ³Ό μ‹€μ œ 값을 μΆ”μΆœν•˜μ—¬ λ³€μˆ˜ μ‹œμ— μΆ”κ°€ μ€‘μš”ν•œ 것은 λ³€μˆ˜ dλŠ” deafultdict νƒ€μž…μ΄λ©΄μ„œ listκ°€ μ΄ˆκΉƒκ°’μœΌλ‘œ μ„ μ–Έλ˜μ—ˆκΈ° λ•Œλ¬Έμ— μƒˆλ‘œμš΄ ν‚€ 값이 없더라도 λ³„λ„λ‘œ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.
  • 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])])
  • lambda() ν•¨μˆ˜λ₯Ό λ°°μš°μ§€ μ•Šμ•„ μ½”λ“œλ₯Ό μ •ν™•νžˆ μ΄ν•΄ν•˜κΈ° μ–΄λ ΅κ² μ§€λ§Œ ‘return 0’이라고 μ΄ν•΄ν•˜λ©΄ 됨
  • 즉, first의 킀값을 λ³„λ„λ‘œ μƒμ„±ν•˜μ§€ μ•Šμ€ 채 λ°”λ‘œ ν˜ΈμΆœν•˜μ—¬ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 것
  • λ”•μ…”λ„ˆλ¦¬μ˜ λ³€μˆ˜λ₯Ό 생성할 λ•Œ 킀에 기본값을 μ§€μ •ν•˜λŠ” 방법 μƒˆλ‘œμš΄ ν‚€λ₯Ό 생성할 λ•Œ 별닀λ₯Έ 쑰치 없이 μƒˆλ‘œμš΄ 값을 생성할 수 μžˆλ‹€.
  • Counter λͺ¨λ“ˆμ¦‰, λ¦¬μŠ€νŠΈλ‚˜ λ¬Έμžμ—΄κ³Ό 같은 μ‹œν€€μŠ€ μžλ£Œν˜•μ— μ €μž₯된 μš”μ†Œ 쀑 같은 값이 λͺ‡ 개 μžˆλŠ”μ§€ κ·Έ 개수λ₯Ό λ°˜ν™˜κΈ°μ‘΄ λ¬Έμžμ—΄κ°’μΈ ‘gallahad’λ₯Ό λ¦¬μŠ€νŠΈν˜•μœΌλ‘œ λ³€ν™˜ν•œ ν›„, text λ³€μˆ˜μ— μ €μž₯ 사싀 ‘gallahad’ μžμ²΄λ„ μ‹œν€€μŠ€ μžλ£Œν˜•μΈ λ¬Έμžμ—΄μ΄λ―€λ‘œ ꡳ이 리슀트둜 λ³€ν™˜ν•  ν•„μš”λŠ” μ—†μŒCounterλ₯Ό μ΄μš©ν•˜λ©΄ 각 문자의 개수 μ„ΈλŠ” μž‘μ—…μ„ 맀우 μ‰½κ²Œ ν•  수 μžˆλ‹€.
    text = """A press release is the quickest and easiest way to get free
    publicity. If well written, a press release can result in multiple published
    articles about your firm and its products. And that can mean new prospects
    contacting you asking you to sell to them.""".lower().split()
    Counter(text)
    # Counter({'and': 3, 'to': 3, 'a': 2, 'press': 2, 'release': 2, 'can': 2,'you': 2, 'is': 1, 'the': 1, 'quickest': 1, 'easiest': 1, 'way': 1, 'get': 1,'free': 1, 'publicity.': 1, 'if': 1, 'well': 1, 'written,': 1, 'result': 1,'in': 1, 'multiple': 1, 'published': 1, 'articles': 1, 'about': 1, 'your': 1,'firm': 1, 'its': 1, 'products.': 1, 'that': 1, 'mean': 1, 'new': 1,'prospects': 1, 'contacting': 1, 'asking': 1, 'sell': 1, 'them.': 1})
    
    CounterλŠ” λ‹¨μˆœνžˆ μ‹œν€€μŠ€ μžλ£Œν˜•μ˜ 데이터λ₯Ό μ„ΈλŠ” 역할도 ν•˜μ§€λ§Œ, λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‚˜ ν‚€μ›Œλ“œ ν˜•νƒœμ˜ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ Counterλ₯Ό 생성할 μˆ˜λ„ μžˆλ‹€.
    • λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ Counter 객체λ₯Ό μƒμ„±ν•˜λŠ” 방법
    from collections import Counter
    
    c = Counter({'red': 4, 'blue': 2})
    print(c)
    # Counter({'red': 4, 'blue': 2})
    print(list(c.elements()))
    # ['red', 'red', 'red', 'red', 'blue', 'blue']
    
    {'red': 4, 'blue': 2}λΌλŠ” μ΄ˆκΉƒκ°’μ„ μ‚¬μš©ν•˜μ—¬ Counterλ₯Ό 생성 elements() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 각 μš”μ†Œμ˜ 개수만큼 λ¦¬μŠ€νŠΈν˜•μ˜ κ²°κ³Όλ₯Ό 좜λ ₯
    • ν‚€μ›Œλ“œ ν˜•νƒœμ˜ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ Counterλ₯Ό μƒμ„±ν•˜λŠ” 방법
    from collections import Counter
    
    c = Counter(cats = 4, dogs = 8)
    print(c)
    # Counter({'dogs': 8, 'cats': 4})
    print(list(c.elements()))
    # ['cats', 'cats', 'cats', 'cats', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs','dogs', 'dogs', 'dogs']
    
    λ§€κ°œλ³€μˆ˜μ˜ 이름을 ν‚€λ‘œ, μ‹€μ œ 값을 κ°’μœΌλ‘œ ν•˜μ—¬ Counterλ₯Ό 생성
    • CounterλŠ” κΈ°λ³Έ 사칙연산 지원 νŒŒμ΄μ¬μ—μ„œ μ§€μ›ν•˜λŠ” κΈ°λ³Έ 연산인 λ§μ…ˆ, λΊ„μ…ˆ, 논리 μ—°μ‚° 등이 κ°€λŠ₯ν•˜λ‹€.
    from collections import Counter
    
    c = Counter(a = 4, b = 2, c = 0, d = -2)
    d = Counter(a = 1, b = 2, c = 3, d = 4)
    c.subtract(d)          # c - d
    c
    # Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
    
    2개의 Counter c와 dλ₯Ό μƒμ„±ν•œ ν›„ c.subtract(d)λ₯Ό μˆ˜ν–‰ν•˜μ—¬ c에 λŒ€ν•œ d의 μ°¨λ₯Ό κ΅¬ν•œ κ²°κ³Ό : c에 μžˆλŠ” 각 μš”μ†Œμ˜ κ°œμˆ˜κ°€ d에 μžˆλŠ” μš”μ†Œμ˜ 개수만큼 κ°μ†Œ
    • κΈ°ν˜ΈλŠ” 두 Counter 객체에 μžˆλŠ” 각 μš”μ†Œλ₯Ό λ”ν•œ 것이고, & κΈ°ν˜ΈλŠ” 두 객체에 같은 값이 μžˆμ„ λ•Œ, 즉 κ΅μ§‘ν•©μ˜ κ²½μš°μ—λ§Œ 좜λ ₯ λ°˜λŒ€λ‘œ I κΈ°ν˜ΈλŠ” 두 Counter κ°μ²΄μ—μ„œ ν•˜λ‚˜κ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€λ©΄, 그리고 μ’€ 더 큰 값이 μžˆλ‹€λ©΄, κ·Έ κ°’μœΌλ‘œ 합집합을 적용
  • from collections import Counter c = Counter(a = 4, b = 2, c = 0, d = -2) d = Counter(a = 1, b = 2, c = 3, d = 4) print(c + d) # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2}) print(c & d) # Counter({'b': 2, 'a': 1}) print(c | d) # Counter({'a': 4, 'd': 4, 'c': 3, 'b': 2})
  • μ •λ ¬κΉŒμ§€ 끝낸 κ²°κ³Όλ¬Ό 확인
  • λ‹€μŒμœΌλ‘œ cλΌλŠ” Counter 객체λ₯Ό μƒμ„±ν•˜λ©΄μ„œ text λ³€μˆ˜λ₯Ό μ΄ˆκΉƒκ°’μœΌλ‘œ μ„€μ • 이λ₯Ό 좜λ ₯ν•˜λ©΄ 각 μ•ŒνŒŒλ²³μ΄ λͺ‡ κ°œμ”© μžˆλŠ”μ§€ μ‰½κ²Œ 확인할 수 μžˆλ‹€. 그리고 c["a"]처럼 λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœμ˜ 문법을 κ·ΈλŒ€λ‘œ μ΄μš©ν•΄ νŠΉμ • ν…μŠ€νŠΈμ˜ κ°œμˆ˜λ„ λ°”λ‘œ 좜λ ₯
  • from collections import Counter text = list("gallahad") text # ['g', 'a', 'l', 'l', 'a', 'h', 'a', 'd'] c = Counter(text) c # Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1}) c["a"] # 3
  • Counter λͺ¨λ“ˆμ€ μ‹œν€€μŠ€ μžλ£Œν˜•μ˜ 데이터 κ°’μ˜ 개수λ₯Ό λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ λ°˜ν™˜ν•˜λŠ” 방법
  • namedtuple λͺ¨λ“ˆ
    from collections import namedtuple
    
    Point = namedtuple('Point', ['x', 'y'])
    # μ’Œν‘œ ν‰λ©΄μ—μ„œμ˜ 점의 μœ„μΉ˜λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄ PointλΌλŠ” 객체λ₯Ό μƒμ„±ν•˜μ—¬ 값을 μ €μž₯ν•œ namedtuple
    p = Point(11, y=22)
    P
    # Point(x=11, y=22)
    p.x, p.y
    # (11, 22)
    print(p[0] + p[1])
    # 33
    
    Point = namedtuple(’Point', ['x', 'y']) μ½”λ“œμ—μ„œ Point 객체의 이름은 Point둜 μ§€μ •ν•˜κ³ , μ €μž₯λ˜λŠ” μš”μ†Œμ˜ 이름을 x와 y둜 μ§€μ •ν•œλ‹€.
    • p λ³€μˆ˜μ— μ €μž₯된 값을 ν˜ΈμΆœν•˜λŠ” 방법
  • λ‹€μŒμœΌλ‘œ Point 객체λ₯Ό μƒμ„±ν•œλ‹€. (생성은 ν•¨μˆ˜μ™€ λΉ„μŠ·ν•˜λ‹€.) Point κ°μ²΄μ—μ„œx와 yλ₯Ό λ³€μˆ˜λ‘œ μ‚¬μš©ν•˜κ³  있고 각각 p = Point(11, y=22)μ—μ„œ μ°¨λ‘€λ‘œ μ‚¬μš©λ˜μ–΄ 값을 μ €μž₯ν•  수 μžˆλ‹€. μž…λ ₯된 값은 p λ³€μˆ˜μ— μ €μž₯ν•œλ‹€.
  • νŠœν”Œμ˜ ν˜•νƒœλ‘œ 데이터 ꡬ쑰체λ₯Ό μ €μž₯ν•˜λŠ” 방법