[Python] 리스트 컴프리헨션(List Comprehension)에 대해

    리스트 컴프리헨션(List Comprehension) 개념

    Java와 C와 같은 언어들을 사용하다가 파이썬의 소스를 보다보면 가장 처음 당황하는 방식이 아마 리스트 캄프리헨션(List Comprehension)이라 생각한다. 파이썬은 수학적인 언어이다보니 기능들도 매우 수학적인데 이 기능은 리스트를 이용하여 새로운 리스트를 만드는 것이다.

     

    그래서 이 기능을 잘 활용하는 사람은 파이썬을 매우 잘 사용하는(파이썬스럽게...) 사람이라 말을 할 수도 있을 것이다. 

     

    파이썬, 리스트 컴프리헨션


    List Comprehension example

    짝수값 리스트

    even_numbers = [x for x in range(10) if x % 2 == 0]
    print(even_numbers)
    # [0, 2, 4, 6, 8]
    

    range로 0 ~ 9까지의 값을 뽑고 그 중에 나누기 2를 하여 나머지가 0인 값(짝수)을 리스트 형태로 저장한다. 

     

    홀수값 리스트

    odd_numbers = [x for x in range(10) if x % 2 == 1]
    print(odd_numbers)
    # [1, 3, 5, 7, 9]

    이번에는 반대로 나누기 2를 하여 나머지가 1인 값(홀수)을 리스트 형태로 저장한다.

     

    홀수값 제곱 리스트

    odd_squares = [x * x for x in odd_numbers]
    print(odd_squares)
    # [1, 9, 25, 49, 81]

    이전 계산으로 만들어진 홀수값(1,3,5,7,9)들을 다시 제곱하여 홀수제곱 변수에 담는다.

     

    구구단 리스트

    gugudan = [(x+2,y+1,(x+2)*(y+1))
             for x in range(8)
             for y in range(9)]
    print(gugudan)
    # [(2, 1, 2), (2, 2, 4), ... (9, 9, 81)]

    list comprehension을 사용하면 쉽게 구구단 리스트를 저장할 수 있다. 내부적으로 이중 for문도 사용이 가능하기에 이중 for문을 돌려서 x와 y값을 생성하고 이를 곱해서 구구단 형태로 값을 저장한다.

     

    로또번호 쉽게 만들기

    import random
    
    candi_number = [x+1 for x in range(45)]
    random.shuffle(candi_number)
    print(candi_number)
    # [44, 3, 24, 17, 36, 35, ... 20]
    
    lotto_number = candi_number[:6]
    print(lotto_number)
    # [44, 3, 24, 17, 36, 35]

    로또 역시 매우 쉽게 만들 수 있다. 1~45의 값을 candi_number 리스트 변수에 담고, 이를 random.shuffle 메소드로 섞는다. 그리고 0~5번째 배열의 값을 가져오면 중복되지 않고 쉽게 로또 번호를 가져올 수 있다.

     

     

    반응형

    댓글

    Designed by JB FACTORY