λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Python

파이썬 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜, λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜μ˜ λͺ¨λ“  것

by μ„œμ•„λž‘πŸ˜ 2023. 12. 12.

 

 

리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜(List Comprehension)

파이썬 λ¦¬μŠ€νŠΈ μ»΄ν”„λ¦¬ν—¨μ…˜μ€ κ°„κ²°ν•˜κ²Œ λ¦¬μŠ€νŠΈλ₯Ό μƒμ„±ν•˜λŠ” λ°©λ²• μ€‘ ν•˜λ‚˜λ‘œ, λ°˜λ³΅λ¬Έκ³Ό μ‘°κ±΄λ¬Έμ„ μ‚¬μš©ν•˜μ—¬ λ¦¬μŠ€νŠΈλ₯Ό λ§Œλ“€ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. λ¦¬μŠ€νŠΈ μ»΄ν”„λ¦¬ν—¨μ…˜μ€ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μœ μ§€ν•˜λ©΄μ„œλ„ κ°•λ ₯ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

일반적인 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜μ˜ κ΅¬μ‘°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

[ν‘œν˜„μ‹ for ν•­λͺ© in iterable if 쑰건]


- ν‘œν˜„μ‹: 각 ν•­λͺ©μ— λŒ€ν•œ 계산식 λ˜λŠ” ν‘œν˜„μ‹μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
- ν•­λͺ©: λ°˜λ³΅ κ°€λŠ₯ν•œ(iterable) κ°μ²΄μ—μ„œ κ°€μ Έμ˜¨ κ°’μž…λ‹ˆλ‹€.
- iterable: λ°˜λ³΅ κ°€λŠ₯ν•œ κ°μ²΄(리슀트, νŠœν”Œ, λ¬Έμžμ—΄ λ“±)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
- 쑰건: μ„ νƒμ μœΌλ‘œ ν¬ν•¨ν•  μ‘°κ±΄μ„ μ§€μ •ν•©λ‹ˆλ‹€. μ‘°κ±΄μ€ ν•„μš”μ— λ”°λΌ μƒλž΅ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 0λΆ€ν„° 9κΉŒμ§€μ˜ 숫자 μ€‘μ—μ„œ μ§μˆ˜λ§Œμ„ μ œκ³±ν•˜μ—¬ 리슀트λ₯Ό λ§Œλ“œλŠ” 경우:

squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares)
# 좜λ ₯: [0, 4, 16, 36, 64]


또 λ‹€λ₯Έ 예둜, λ¬Έμžμ—΄ λ¦¬μŠ€νŠΈμ—μ„œ λ¬Έμžμ—΄μ˜ 길이가 3 이상인 λ¬Έμžμ—΄λ§Œ μ„ νƒν•˜λŠ” 경우:

words = ["apple", "banana", "kiwi", "orange", "grape"]
filtered_words = [word for word in words if len(word) >= 3]
print(filtered_words)
# 좜λ ₯: ['apple', 'banana', 'kiwi', 'orange', 'grape']

 

 

 

λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜(Dictionary Comprehension)

파이썬 λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜μ€ 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜κ³Ό μœ μ‚¬ν•˜κ²Œ μ‚¬μš©λ˜λ©°, λ”•μ…”λ„ˆλ¦¬λ₯Ό μƒμ„±ν•˜λŠ” κ°„κ²°ν•œ 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜μ˜ 일반적인 κ΅¬μ‘°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

{ν‚€_ν‘œν˜„μ‹: κ°’_ν‘œν˜„μ‹ for ν•­λͺ© in iterable if 쑰건}


- ν‚€_ν‘œν˜„μ‹: κ° ν•­λͺ©μ—μ„œ μΆ”μΆœν•œ ν‚€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν‘œν˜„μ‹μž…λ‹ˆλ‹€.
- κ°’_ν‘œν˜„μ‹: κ° ν•­λͺ©μ—μ„œ μΆ”μΆœν•œ κ°’을 λ‚˜νƒ€λ‚΄λŠ” ν‘œν˜„μ‹μž…λ‹ˆλ‹€.
- ν•­λͺ©: λ°˜λ³΅ κ°€λŠ₯ν•œ(iterable) κ°μ²΄μ—μ„œ κ°€μ Έμ˜¨ κ°’μž…λ‹ˆλ‹€.
- iterable: λ°˜λ³΅ κ°€λŠ₯ν•œ κ°μ²΄(리슀트, νŠœν”Œ, λ¬Έμžμ—΄ λ“±)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
- 쑰건: μ„ νƒμ μœΌλ‘œ ν¬ν•¨ν•  μ‘°κ±΄μ„ μ§€μ •ν•©λ‹ˆλ‹€. μ‘°κ±΄μ€ ν•„μš”μ— λ”°λΌ μƒλž΅ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.


κ°„λ‹¨ν•œ 예제λ₯Ό 톡해 μ„€λͺ…ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 1λΆ€ν„° 5κΉŒμ§€μ˜ 숫자λ₯Ό ν‚€λ‘œ ν•˜κ³  각 숫자의 μ œκ³±μ„ κ°’μœΌλ‘œ ν•˜λŠ” λ”•μ…”λ„ˆλ¦¬λ₯Ό λ§Œλ“œλŠ” 경우:

squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict)
# 좜λ ₯: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}



또 λ‹€λ₯Έ 예둜, λ¬Έμžμ—΄ λ¦¬μŠ€νŠΈμ—μ„œ 각 λ¬Έμžμ—΄μ˜ 길이λ₯Ό ν‚€λ‘œ ν•˜κ³  ν•΄λ‹Ή λ¬Έμžμ—΄μ„ κ°’μœΌλ‘œ ν•˜λŠ” λ”•μ…”λ„ˆλ¦¬λ₯Ό μƒμ„±ν•˜λŠ” 경우:

words = ["apple", "banana", "kiwi", "orange", "grape"]
length_dict = {word: len(word) for word in words}
print(length_dict)
# 좜λ ₯: {'apple': 5, 'banana': 6, 'kiwi': 4, 'orange': 6, 'grape': 5}

 

λ”•μ…”λ„ˆλ¦¬μ—μ„œ '전학생'을 ν‚€λ‘œ κ°–λŠ” λ°μ΄ν„°λ§Œ μ œμ™Έν•˜λŠ” 경우:

scores = {'철수': 50, '영희': 80, '길동': 90, '순희': 60, '전학생': 100}
scores = { name: score for name, score in scores.items() if name != '전학생'}
print(scores)

#좜λ ₯: {'길동': 90, '순희': 60, '영희': 80, '철수': 50}

 



리슀트, λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜μ€ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ λ§Œλ“€μ–΄μ£Όκ³ , μ—¬λŸ¬ μ€„μ˜ μ½”λ“œλ₯Ό ν•œ μ€„λ‘œ ν‘œν˜„ν•  수 μžˆμ–΄ 가독성을 ν–₯μƒμ‹œμΌœμ€λ‹ˆλ‹€.

λŒ“κΈ€