[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]]

     

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

    ๋Œ“๊ธ€