본문 바로가기
프로그래밍/파이썬

파이썬(python) 리스트 내포(List comprehension)

by 블랜드 2022. 4. 2.
반응형

리스트 내포(List comprehension) 

 리스트에 for문을 사용하여 새로운 요소들을 추가하고(append) 싶은 때는 리스트 내포를 사용하면 한 줄로 작성할 수 있어서 편하다. 리스트 내포는 이름에서 짐작할 수 있듯이 리스트 안에 무엇인가를 내포하고 있다. 파이썬에서 리스트 내포는 리스트 안에 for문을 포함한다. 다음 예제를 보자.

a= [1, 2, 3]
result = []
for num in a:
    result.append(num * 2)
print(result)

 위 코드는 for문을 통해 append 함수를 반복 사용하여 a=[1, 2, 3]의 요소를 2배한 것을  result라는 리스트에 추가해주는 코드이다. 실행 결과는 아래와 같다.

실행 결과

 위 코드를 아래와 같이 리스트 내포를 사용하여 짧게 줄일 수도 있다. 위 코드에서 result = [ ]부터 for num in a:까지 이 문장들을 result = [num * 2 for num in a]라는 단 한 문장으로 줄여 간단히 만들었다. 이것이 리스트 내포다. 실행 결과는 위와 같다.

a= [1, 2, 3]
result = [num * 2 for num in a]
print(result)

실행 결과


리스트 내포(List comprehension) 문법

리스트 내포의 일반적인 문법은 아래와 같다.

리스트 내포(List comprehension): 리스트 안에 for문을 포함한다.
[표현식 for 변수 in 반복 가능한 객체 if 조건문]
[표현식 for 변수 in 반복 가능한 객체 for 조건문]

 여기서 반복 가능한 객체란 range(1, 10)나 [1, 2, 3, 4]와 같이 반복할 수 있는 대상이 여러 개인 것들을 일컫는다. 아래에 표로 리스트 내포와 원래 코드의 관계를 같이 나타내었다.

result = [x*y for x in range(2, 10) for y in range(1, 10)]
result = []
for x in range(2, 10):
           for y in range(1, 10):
                      result.append(x*y)

 리스트 내포의 규칙이 보이는가? 위 코드처럼 리스트 내포를 쓸 때는 '표현식' x*y 다음에 조건문(또는 반복문)을 오른쪽으로 차례대로 써주면 된다. 자세하게 설명하자면, 위 코드에서 추가하고자 하는 표현식은 x*y인데 중첩된 for문이 for x in range(2, 10):, for y in range(1, 10) 순으로 나타나 있다. 따라서 리스트 내포를 쓸 때 이것을 차례대로 [x*y for x in range(2, 10) for y in range(1, 10)]로 나타내면 된다. 아래 예도 마찬가지다.

 

result = [num * 3 for num in a if num % 2 == 0]​
result = []
for num in a:
    if num % 2 == 0:
        result.append(num * 3)

 위 예도 표현식은 num * 3이고, for num in a:가 먼저 오고 그 다음에 if num % 2 == 0이 왔다. 따라서 리스트 내포를 사용하여 한 줄로 나타낼 때는 표현식을 먼저 쓴 다음 for, if문의 순서대로 [num * 3 for num in a if num % 2 == 0]로 나타내면 되는 것이다.  

반응형

댓글