[pythonic code] ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ list comprehention

๋ฐ˜์‘ํ˜•

๐Ÿ’ก ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜?

๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์ด๋ž€ ๋‹จ์ˆœํ•˜๊ฒŒ, ์ข€ ๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ๋‚˜์—ด๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•  ๋•Œ, ์ผ๋ฐ˜์ ์ธ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ์— ์ˆซ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.


  
result = []
for i in range(10):
result.append(i)

 

์—ฌ๊ธฐ์„œ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ๋‹จ ํ•œ์ค„๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.


  
result = [x for x in range(10)]

 

์š”๊ฒƒ์ด ๋ฐ”์•„๋กœ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์ด๋‹ค-!

 


๐Ÿ’ก ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• 1) IF๋ฌธ (ํ•„ํ„ฐ๋ง)


  
result = [i for i in range(10) if i % 2 == 0]

์•ž์—์„œ ์ž‘์„ฑํ•œ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ ์ฝ”๋“œ์— if๋ฌธ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’์„ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

 


  
result = [i if i % 2 == 0 else 10 for i in range(10)]

else๋ฌธ๊นŒ์ง€ ์‚ฌ์šฉํ•  ๊ฑฐ๋ผ๋ฉด ์ด๋ ‡๊ฒŒ if-else๋ฌธ์„ for๋ฌธ ์•ž์— ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

 

๐Ÿ’ก ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• 2) ์ค‘์ฒฉ๋ฐ˜๋ณต๋ฌธ


  
>>> lst_1 = ['a1', 'a2', 'a3']
>>> lst_2 = ['b1', 'b2', 'b3']
>>> [i + j for i in lst_1 for j in lst_2]
['a1b1', 'a1b2', 'a1b3', 'a2b1', 'a2b2', 'a2b3', 'a3b1', 'a3b2', 'a3b3']

 

 

๐Ÿ’ก ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• 3) ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ (Nested List Comprehension)

์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ๋Š” ํ•˜๋‚˜์˜ ์ •๋ณด๋ฅผ row ๋‹จ์œ„๋กœ ์ €์žฅํ•œ๋‹ค. ๋”ฐ๊ฐ€์„œ ๋Œ€๊ด„ํ˜ธ๋ฅผ ํ•˜๋‚˜ ๋” ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


  
>>> lst_1 = ['a1', 'a2', 'a3']
>>> lst_2 = ['b1', 'b2', 'b3']
>>> [ [ i + j for i in lst_1 ] for j in lst_2 ]
[['a1b1', 'a2b1', 'a3b1'], ['a1b2', 'a2b2', 'a3b2'], ['a1b3', 'a2b3', 'a3b3']]

์•ž์„œ ๋ณธ ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋’ค์˜ for๋ฌธ์ด ๋” ๋จผ์ € ์‹คํ–‰๋œ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” j๊ฐ€ ๋จผ์ € 'b1'์œผ๋กœ ๊ณ ์ •๋˜๊ณ  lst_1์ด ๋ˆ๋‹ค.

 


  
[ [ row[i] for row in matrix ] for i in range(4) ]

 

 

โœ… +) ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌ์…˜ ํ™œ์šฉ

 

  • ๊ฐ ์›์†Œ์— ํ•จ์ˆ˜ ์ผ๊ด„ ์ ์šฉ

  
>>> vec = [-4, -2, 0, 2 ,4]
>>> [abs(x) for x in vec]
[4, 2, 0, 2, 4]

 

  • ๊ฐ ์›์†Œ์— method ์ผ๊ด„ ์ ์šฉ

  
>>> fruits = [' banana', 'loganberry ', 'passion fruit ']
>>> [fruit.strip() for fruit in fruits]
['banana', 'loganberry', 'passion fruit']

 

  • tuple ์ž๋ฃŒํ˜•์„ ์›์†Œ๋กœ ๊ฐ–๋Š” ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ

  
>>> [ (x, x**2) for x in range(6) ]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
>>> [ x, x**2 for x in range(6) ]
File "<stdin>", line 1
[ x, x**2 for x in range(6) ]
^
SyntaxError: invalid syntax

 

 

  • ์ „์น˜ ํ–‰๋ ฌ ๋งŒ๋“ค๊ธฐ

  
>>> matrix = [[1, 2], [3,4], [5,6], [7,8]]
>>> [ [row[i] for row in matrix] for i in range(2) ]
[[1, 3, 5, 7], [2, 4, 6, 8]]

 

๋”๋ณด๊ธฐ
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€