์ž๋ฃŒ ๊ตฌ์กฐ ๐Ÿ—„ List comprehension

yeeun leeยท2020๋…„ 5์›” 4์ผ
1

์žฅ๊ณ ์—์„œ ์ฟผ๋ฆฌ์…‹์„ ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต๋ฌธ์„ ์“ธ ์ผ์ด ๋งŽ์€๋ฐ, ๋ฐ์ดํ„ฐ ์ข…๋ฅ˜๊ฐ€ ๋งŽ์•„ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์€ ๋–จ์–ด์ง€๋‹ค๋ณด๋‹ˆ list comprehension์„ ์จ์•ผํ•  ๊ฒƒ ๊ฐ™์•„์„œ ์ •๋ฆฌํ•ด๋ณด๋Š” ๋ธ”๋กœ๊ทธ.

์‚ฌ์‹ค python ๋ ˆํ”Œ๋ฆฟ์„ ํ•˜๋‹ค๊ฐ€, ๋ฌธ์ œ๋ฅผ ์—„์ฒญ ์‰ฝ๊ฒŒ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•(๋งํฌ์˜ 1.3๋ถ€ํ„ฐ)์„ ์š”๊ฑฐ๋กœ ์ฐพ์•„๋‚ด์„œ ์•Œ๊ฒŒ ๋œ ๊ฐœ๋…์ด๊ธด ํ•˜๋‹ค. ๊ทธ ์ดํ›„๋กœ ๋”ฑํžˆ ์‚ฌ์šฉ์„ ์•ˆ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ๋” ์นœํ•ด์ ธ์„œ ๋งŽ์ด ์“ฐ๊ธฐ ์œ„ํ•ด ๊ฐ€์ ธ์™€๋ดค๋‹ค.

์ฝ”๋”ฉ๋„์žฅ:๋ฆฌ์ŠคํŠธ ํ‘œํ˜„์‹ ์‚ฌ์šฉํ•˜๊ธฐ์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณต๋ถ€ํ–ˆ๋‹ค ๐Ÿค“

ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํŠน์ดํ•œ ์ ์€ ๋ฆฌ์ŠคํŠธ ์•ˆ์— for ๋ฐ˜๋ณต๋ฌธ๊ณผ if ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์‹, for ๋ฐ˜๋ณต๋ฌธ, if ์กฐ๊ฑด๋ฌธ ๋“ฑ์„ ์ง€์ •ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜(list comprehension)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

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

๋ฆฌ์ŠคํŠธ ํ‘œํ˜„์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์‹, for ๋ฐ˜๋ณต๋ฌธ์„ ์ง€์ •ํ•œ๋‹ค.

๋ฐ˜๋ณต๋ฌธ: [์‹ for ๋ณ€์ˆ˜ in ๋ฆฌ์ŠคํŠธ]

  • list(์‹ for ๋ณ€์ˆ˜ in ๋ฆฌ์ŠคํŠธ)์˜ ํ˜•์‹์œผ๋กœ๋„ ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ, python style์€ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค. list๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๊ฒƒ์€ data type์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— C์–ธ์–ด ์Šคํƒ€์ผ์— ๊ฐ€๊น๋‹ค.
# 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
>>> a = [i for i in range(10)]        
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ๊ฐ’์— 5๋ฅผ ๋”ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
>>> c = [i + 5 for i in range(10)]
>>> c
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

์กฐ๊ฑด๋ฌธ: [์‹ for ๋ณ€์ˆ˜ in ๋ฆฌ์ŠคํŠธ if ์กฐ๊ฑด์‹]

# 0~9 ์ˆซ์ž ์ค‘ 2์˜ ๋ฐฐ์ˆ˜์ธ ์ˆซ์ž(์ง์ˆ˜)๋กœ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
>>> a = [i for i in range(10) if i % 2 == 0]   
>>> a
[0, 2, 4, 6, 8]

# 0~9 ์ˆซ์ž ์ค‘ ํ™€์ˆ˜์— 5๋ฅผ ๋”ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
>>> b = [i + 5 for i in range(10) if i % 2 == 1]    
>>> b
[6, 8, 10, 12, 14]

๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•˜๊ธฐ

[์‹ for ๋ณ€์ˆ˜1 in ๋ฆฌ์ŠคํŠธ1 if ์กฐ๊ฑด์‹1 for ๋ณ€์ˆ˜2 in ๋ฆฌ์ŠคํŠธ2 if ์กฐ๊ฑด์‹2 ... for ๋ณ€์ˆ˜n in ๋ฆฌ์ŠคํŠธn if ์กฐ๊ฑด์‹n]

>>> a = [i * j for j in range(2, 10) for i in range(1, 10)]
>>> a
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]

# ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋“ค์—ฌ์“ฐ๊ธฐ 
a = [i * j for j in range(2, 10)
           for i in range(1, 10)]

๋‚ด ์ฝ”๋“œ์— ์ ์šฉ

๋กค๋ ‰์Šค ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ์— ๋งŒ๋“ค์—ˆ๋˜ ๋ชจ๋“  ๋ฐ˜๋ณต๋ฌธ์„ ๊ฐ€๋…์„ฑ ๋ฐ ์ฝ”๋“œ ์ถ•์•ฝ์„ ์œ„ํ•ด list comprehension์œผ๋กœ ๋ฐ”๊พธ์–ด๋ณด์ž ๐Ÿ˜ค๐Ÿ˜ค๐Ÿ˜ค

profile
์ด์‚ฌ๊ฐ„ ๋ธ”๋กœ๊ทธ: yenilee.github.io

0๊ฐœ์˜ ๋Œ“๊ธ€