Programming/Pyhton

파이썬: 리스트 내포(List Comprehension)

JunsuKim 2022. 8. 2.
728x90

리스트 내포(List Comprehension)

파이썬에서는 for문과 if문을 한 라인에 작성하여 코드를 간결하고 직관적으로 만들며, 실행속도를 높혀주는 기법인 리스트 내포 기법이 존재한다. 형태는 다음과 같다.

 

리스트 명 = [표현식 for 변수 in 반복 가능한 대상]

 

예를 들면 다음과 같다.

list = [i for i in range(20)]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

이렇게 하면, 0부터 19까지의 수가 리스트로 변환되게 된다.

 

처음에도 말했듯, 리스트 내포는 for문과 if문을 한 라인에 작성할 수 있다.

조건을 추가했을 떄의 형태는 다음과 같다.

 

리스트 명 = [표현식 for 변수 in 반복 가능한 대상 if 조건문]

 

이번엔 if문을 통해 리스트 내포에 조건을 추가해보자,

list = [i for i in range(20) if i % 3 == 0]

[3, 6, 9, 12, 15, 18]

뒤에 i % 3 == 0이라는 조건이 붙었으므로 1~19사이의 3의 배수가 리스트에 들어가게 된다.

리스트 내포 활용

구구단 프로그램을 짠다고 생각해보자.

for문을 사용한다면 다음과 같을 것이다.

result = []

for i in range(1, 10):
    for j in range(1, 10):
        result.append(i * j)

이를 리스트 내포 기법을 사용하면 다음과 같이 정리 가능하다.

result = [i * j for i in range(1, 10) for j in range(1, 10)]

바깥쪽의 for문이 먼저 쓰이고, 안쪽의 for문이 이후에 쓰인다.

순서대로 리스트 안에서 사용하면 되는 것이다.

 

이렇게 for문이 두개 이상 일 때 조건을 어떻게 추가해야할까?

홀수단만 계산하는 구구단을 for문을 이용해서 만들어보자.

result = []

for i in range(1, 10):
    if i % 2 == 1:
        for j in range(1, 10):
            result.append(i * j)

이제 이 코드를 리스트 내포 기법으로 변환할 것이다.

위에서도 말했듯 순서대로 리스트 안에 사용하면 된다.

for문 다음 if문, 후에 또 for문의 형식이 된다.

result = [i * j for i in range(1, 10) if i % 2 == 1 for j in range(1, 10)]
728x90

댓글