KR_Comprehension - somaz94/python-study GitHub Wiki

Python Comprehension ๊ฐœ๋… ์ •๋ฆฌ


1๏ธโƒฃ List Comprehension

๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

# ๊ธฐ๋ณธ ํ˜•์‹
# [ํ‘œํ˜„์‹ for ํ•ญ๋ชฉ in ๋ฐ˜๋ณต๊ฐ€๋Šฅ๊ฐ์ฒด if ์กฐ๊ฑด๋ฌธ]

# ์˜ˆ์ œ 1: 0-9์˜ ์ œ๊ณฑ ์ˆ˜ ๋ฆฌ์ŠคํŠธ
squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# ์˜ˆ์ œ 2: ์ง์ˆ˜๋งŒ ํฌํ•จํ•˜๋Š” ๋ฆฌ์ŠคํŠธ
evens = [x for x in range(10) if x % 2 == 0]
# [0, 2, 4, 6, 8]

# ์˜ˆ์ œ 3: ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ
matrix = [[i+j for j in range(3)] for i in range(3)]
# [[0,1,2], [1,2,3], [2,3,4]]

โœ… ํŠน์ง•:

  • ๊ฐ„๊ฒฐํ•œ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
  • ์กฐ๊ฑด๋ฌธ ํฌํ•จ ๊ฐ€๋Šฅ
  • ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ ์ง€์›


2๏ธโƒฃ Dictionary Comprehension

๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

# ๊ธฐ๋ณธ ํ˜•์‹
# {ํ‚ค_ํ‘œํ˜„์‹: ๊ฐ’_ํ‘œํ˜„์‹ for ํ•ญ๋ชฉ in ๋ฐ˜๋ณต๊ฐ€๋Šฅ๊ฐ์ฒด}

# ์˜ˆ์ œ 1: ์ˆซ์ž:์ œ๊ณฑ ์Œ์˜ ๋”•์…”๋„ˆ๋ฆฌ
squares = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# ์˜ˆ์ œ 2: ์กฐ๊ฑด๋ฌธ ํฌํ•จ
even_squares = {x: x**2 for x in range(5) if x % 2 == 0}
# {0: 0, 2: 4, 4: 16}

# ์˜ˆ์ œ 3: ๊ธฐ์กด ๋”•์…”๋„ˆ๋ฆฌ ๋ณ€ํ™˜
prices = {'apple': 2.0, 'orange': 3.0, 'banana': 1.0}
doubled = {k: v*2 for k, v in prices.items()}
# {'apple': 4.0, 'orange': 6.0, 'banana': 2.0}

โœ… ํŠน์ง•:

  • ํ‚ค-๊ฐ’ ์Œ ์ƒ์„ฑ
  • ๊ธฐ์กด ๋”•์…”๋„ˆ๋ฆฌ ๋ณ€ํ™˜
  • ์กฐ๊ฑด๋ถ€ ํ•„ํ„ฐ๋ง


3๏ธโƒฃ Set Comprehension

์ง‘ํ•ฉ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

# ๊ธฐ๋ณธ ํ˜•์‹
# {ํ‘œํ˜„์‹ for ํ•ญ๋ชฉ in ๋ฐ˜๋ณต๊ฐ€๋Šฅ๊ฐ์ฒด if ์กฐ๊ฑด๋ฌธ}

# ์˜ˆ์ œ 1: ๋ฌธ์ž์—ด์˜ ๊ณ ์œ  ๋ฌธ์ž
chars = {c for c in 'hello world'}
# {'h', 'e', 'l', 'o', 'w', 'r', 'd', ' '}

# ์˜ˆ์ œ 2: ์กฐ๊ฑด๋ฌธ ํฌํ•จ
vowels = {c for c in 'hello world' if c in 'aeiou'}
# {'e', 'o'}

โœ… ํŠน์ง•:

  • ์ค‘๋ณต ์ œ๊ฑฐ
  • ๊ณ ์œ  ์š”์†Œ ์ˆ˜์ง‘
  • ์ง‘ํ•ฉ ์—ฐ์‚ฐ ์ง€์›


4๏ธโƒฃ Generator Comprehension

๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

# ๊ธฐ๋ณธ ํ˜•์‹
# (ํ‘œํ˜„์‹ for ํ•ญ๋ชฉ in ๋ฐ˜๋ณต๊ฐ€๋Šฅ๊ฐ์ฒด if ์กฐ๊ฑด๋ฌธ)

# ์˜ˆ์ œ 1: ์ œ๊ณฑ ์ˆ˜ ์ƒ์„ฑ
squares = (x**2 for x in range(10))
# ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด ๋ฐ˜ํ™˜

# ์‚ฌ์šฉ ์˜ˆ
for square in squares:
    print(square)  # ํ•˜๋‚˜์”ฉ ์ƒ์„ฑํ•˜์—ฌ ์ถœ๋ ฅ

โœ… ํŠน์ง•:

  • ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ 
  • ์ง€์—ฐ ํ‰๊ฐ€
  • ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ


5๏ธโƒฃ ์ค‘์ฒฉ๋œ Comprehension

์—ฌ๋Ÿฌ ๋ฐ˜๋ณต๋ฌธ์„ ์กฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

# ์˜ˆ์ œ 1: 2์ฐจ์› ๋ฆฌ์ŠคํŠธ ํ‰ํƒ„ํ™”
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [x for row in matrix for x in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

# ์˜ˆ์ œ 2: ์กฐ๊ฑด๋ฌธ ํฌํ•จํ•œ ์ค‘์ฒฉ ์ปดํ”„๋ฆฌํ—จ์…˜
result = [x+y for x in [1,2,3] for y in [10,20,30] if (x+y) % 2 == 0]

โœ… ํŠน์ง•:

  • ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ฒ˜๋ฆฌ
  • ๋‹ค์ค‘ ๋ฐ˜๋ณต๋ฌธ ์ง€์›
  • ์กฐ๊ฑด๋ถ€ ํ•„ํ„ฐ๋ง


6๏ธโƒฃ ์„ฑ๋Šฅ๊ณผ ๊ฐ€๋…์„ฑ

์ปดํ”„๋ฆฌํ—จ์…˜์€ ์„ฑ๋Šฅ๊ณผ ๊ฐ€๋…์„ฑ ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

# ์ผ๋ฐ˜ ๋ฐ˜๋ณต๋ฌธ
squares_loop = []
for i in range(10):
    squares_loop.append(i**2)

# ์ปดํ”„๋ฆฌํ—จ์…˜
squares_comp = [i**2 for i in range(10)]

# ๋„ˆ๋ฌด ๋ณต์žกํ•œ ์ปดํ”„๋ฆฌํ—จ์…˜ (๊ฐ€๋…์„ฑ โ†“)
complex_comp = [x+y for x in range(10) if x % 2 == 0 
              for y in range(10) if y % 3 == 0]

# ์œ„ ํ‘œํ˜„์„ ์ผ๋ฐ˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ฐœ์„ 
better_readability = []
for x in range(10):
    if x % 2 == 0:
        for y in range(10):
            if y % 3 == 0:
                better_readability.append(x+y)

โœ… ํŠน์ง•:

  • ๊ฐ„๊ฒฐ์„ฑ: ์ปดํ”„๋ฆฌํ—จ์…˜์ด ์ผ๋ฐ˜ ๋ฐ˜๋ณต๋ฌธ๋ณด๋‹ค ๋” ๊ฐ„๊ฒฐ
  • ์„ฑ๋Šฅ: ์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํ”„๋ฆฌํ—จ์…˜์ด ๋ฏธ์„ธํ•˜๊ฒŒ ๋” ๋น ๋ฆ„
  • ๊ฐ€๋…์„ฑ: ๋ณต์žกํ•œ ๊ฒฝ์šฐ ์ผ๋ฐ˜ ๋ฐ˜๋ณต๋ฌธ์ด ๋” ์ฝ๊ธฐ ์‰ฌ์›€
  • ๋ฉ”๋ชจ๋ฆฌ: ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ์ปดํ”„๋ฆฌํ—จ์…˜์ด ๊ฐ€์žฅ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ 


7๏ธโƒฃ ์‹ค์šฉ์ ์ธ ์˜ˆ์ œ

์ปดํ”„๋ฆฌํ—จ์…˜์˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋“ค์ด๋‹ค.

# ํŒŒ์ผ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ
import os
files = [f for f in os.listdir('.') if f.endswith('.py')]

# ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๋ฐ ํ•„ํ„ฐ๋ง
data = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}, 
        {'name': 'Charlie', 'age': 17}, {'name': 'Dave', 'age': 22}]
adults = [person['name'] for person in data if person['age'] >= 18]
# ['Alice', 'Bob', 'Dave']

# ๋‹จ์–ด ๋นˆ๋„ ๊ณ„์‚ฐ
text = "hello world hello python world"
word_freq = {word: text.split().count(word) for word in set(text.split())}
# {'hello': 2, 'world': 2, 'python': 1}

# ํ–‰๋ ฌ ์ „์น˜
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

โœ… ์‘์šฉ ์‚ฌ๋ก€:

  • ํŒŒ์ผ ์‹œ์Šคํ…œ ์ž‘์—…
  • ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๋ฐ ๋ณ€ํ™˜
  • ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ
  • ํ–‰๋ ฌ ์—ฐ์‚ฐ
  • API ์‘๋‹ต ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ


์ฃผ์š” ํŒ

โœ… ๋ชจ๋ฒ” ์‚ฌ๋ก€:

  • ๊ฐ€๋…์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ ์ ˆํžˆ ์‚ฌ์šฉ
  • ๋ณต์žกํ•œ ์ปดํ”„๋ฆฌํ—จ์…˜์€ ์ผ๋ฐ˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ž‘์„ฑ
  • ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ์ปดํ”„๋ฆฌํ—จ์…˜์€ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์‹œ ์œ ์šฉ
  • ์ค‘์ฒฉ๋œ ์ปดํ”„๋ฆฌํ—จ์…˜์€ ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉ
  • ๋ผ์ธ ๊ธธ์ด 80์ž๋ฅผ ๋„˜๋Š” ์ปดํ”„๋ฆฌํ—จ์…˜์€ ์—ฌ๋Ÿฌ ์ค„๋กœ ๋‚˜๋ˆ„๊ธฐ
  • ์ฃผ์„์œผ๋กœ ๋ณต์žกํ•œ ์ปดํ”„๋ฆฌํ—จ์…˜์˜ ์˜๋„๋ฅผ ์„ค๋ช…
  • ์ค‘๋ณต ๊ณ„์‚ฐ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜ ํ™œ์šฉ
  • ๊ฐ€๋Šฅํ•˜๋ฉด ๋‚ด์žฅ ํ•จ์ˆ˜(map, filter)๋ณด๋‹ค ์ปดํ”„๋ฆฌํ—จ์…˜ ์„ ํ˜ธ
  • ์—ฌ๋Ÿฌ ์กฐ๊ฑด์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณตํ•ฉ ์กฐ๊ฑด๋ณด๋‹ค ๋‹ค์ค‘ ํ•„ํ„ฐ๋ง ๊ณ ๋ ค
  • ๋ทฐํ‹ฐํ’€์ˆ˜ํ”„๋‚˜ ํŒ๋‹ค์Šค์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ


โš ๏ธ **GitHub.com Fallback** โš ๏ธ