🌡 μˆ«μžν˜• 리슀트λ₯Ό 단일 κ°’μœΌλ‘œ λ³‘ν•©ν•˜κΈ°

eunseo kim πŸ‘©β€πŸ’»Β·2021λ…„ 1μ›” 25일
3

🌡 파이썬 문법

λͺ©λ‘ 보기
1/2

πŸ€” 문제 상황

>>> a = [1, 2, 3, 4, 5] # 이 리슀트λ₯Ό
12345			# ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ 병합!
  • μœ„μ˜ μˆ«μžν˜• 리슀트 aλ₯Ό 단일 κ°’μœΌλ‘œ λ³‘ν•©ν•˜μ—¬ '12345'λΌλŠ” 값을 μ–»κ³  μ‹Άλ‹€!
  • μ–΄λ–»κ²Œ ꡬ할 수 μžˆμ„κΉŒ?

πŸ‘† ν•˜λ‚˜. forλ¬Έ μ΄μš©ν•˜κΈ°

>>> ''.join(str(x) for x in a)
12345
  • μž„μ‹œ λ³€μˆ˜(x)κ°€ ν•„μš”ν•˜λ‹€.
  • 가독성이 μ’€ 떨어진닀.

✌ λ‘˜. map μ΄μš©ν•˜κΈ°

>>> ''.join(map(str, a))
12345
  • str둜 λ°˜ν™˜ν•΄μ€Œμ„ μ½”λ“œ λ‚΄μ—μ„œ μ•”μ‹œν•˜μ—¬ 가독성이 μ’‹λ‹€.
  • μœ„μ˜ λ°©λ²•κ³ΌλŠ” λ‹€λ₯΄κ²Œ μž„μ‹œ λ³€μˆ˜(x)λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„ κΉ”λ”ν•˜λ‹€.

πŸ‘Œ μ…‹. functools의 reduce ν•¨μˆ˜ μ΄μš©ν•˜κΈ°

from functools import *
reduce(lambda x, y : 10 * x + y, a, 0)
12345
  • reduce() : reduce(집계 ν•¨μˆ˜, 순회 κ°€λŠ₯ν•œ 데이터(, μ΄ˆκΈ°κ°’))
  • 집계 ν•¨μˆ˜λŠ” λ‘κ°œμ˜ 인자λ₯Ό λ°›μ•„μ•Ό ν•œλ‹€. 첫번째 μΈμžλŠ” λˆ„μ κ°’(accumulator), λ‘λ²ˆμ§Έ μΈμžλŠ” ν˜„μž¬κ°’(current value)κ°€ λ„˜μ–΄μ˜€κ²Œ λœλ‹€.
  • λˆ„μ κ°’μ€ ν•¨μˆ˜ μ‹€ν–‰μ˜ μ‹œμž‘λΆ€ν„° λκΉŒμ§€ κ³„μ†ν•΄μ„œ μž¬μ‚¬μš©λ˜λŠ” 값이고, ν˜„μž¬κ°’μ€ 루프 λŒλ©΄μ„œ κ³„μ†ν•΄μ„œ λ°”λ€ŒλŠ” 값이닀.
  • 즉 λ°˜ν™˜ 값은 μˆ«μžν˜•μ΄λ‹€.
  • μœ„μ˜ 식을 λ‹¨κ³„λ³„λ‘œ λ‚˜λˆ μ„œ ꡬ해보면 μ•„λž˜μ™€ κ°™λ‹€.
>>> a = [1, 2, 3, 4, 5]
>>> xλŠ” λˆ„μ κ°’, yλŠ” (μˆœνšŒν•˜λŠ”) ν˜„μž¬κ°’

1. x = 0, y = 1
10 * x + y = 1, x = 1

2. x = 1, y = 2
10 * x + y = 12, x = 12

3. x = 12, y = 3
10 * x + y = 123, x = 123

4. x = 123, y = 4
10 * x + y = 1234, x = 1234

5. x = 1234, y = 5
10 * x + y = 12345, x = 12345
  • μ΄λŸ¬ν•œ 원리λ₯Ό μ΄μš©ν•˜λ©΄ λ‹€λ₯Έ 연산듀도 μ‘μš©μ΄ κ°€λŠ₯ν•˜λ‹€.
# λ§μ…ˆ
reduce(lambda x, y : x + y, a)

# κ³±μ…ˆ
reduce(lambda x, y : x * y, a)
profile
μ—΄μ‹¬νžˆπŸ’¨ (μ•Œκ³ λ¦¬μ¦˜ λΈ”λ‘œκ·Έ)

0개의 λŒ“κΈ€