๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/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}

 



๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ ์ปดํ”„๋ฆฌํ—จ์…˜์€ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ์—ฌ๋Ÿฌ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

๋Œ“๊ธ€