본문 바로가기

Python

[Python] 파이썬 리스트 내포(List comprehension)

반응형

리스트 내포(List comprehension)

파이썬에서는 for문과 if문을 한 라인에 작성하여 코드를 직관적으로 만들고 실행속도를 높혀주는 기법인 리스트 내포(List comprehension)기법이 존재합니다. 사용 방법은 아래와 같습니다.

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

아직 잘 이해가 안가시죠? 리스트 내포는 처음 접하시는 분들은 한번에 이해하기 어려울 수 있으니 예제를 통해서 살펴보도록 하겠습니다.

리스트 내포를 활용한 원소 단위 변환 (m -> cm)

>>> meter_list = [3, 7, 9, 10] 
>>> centi_meter_list = [100*i for i in meter_list] 
>>> print(centi_meter_list) 

[300, 700, 900, 1000] 

 

위 예제는 미터를 센티미터로 변환하는 리스트 내포의 예시입니다.
centi_meter_list = [100*i for i in meter_list]
를 보시면 meter_list의 요소들을 for문을 돌면서 각각 100*i 연산을 시켜서 새로운 변수에 저장하는 연산을 수행합니다.


리스트 내포를 활용한 리스트 원소 제곱
만약 위의 예제를 조금 변형해서 제곱을 해보려면 어떻게 해야할까요?

>>> meter_list = [3, 7, 9, 10] 
>>> meter_square_list = [i*i for i in meter_list] 
>>> print(meter_square_list) 

[9, 49, 81, 100] 



리스트 내포에 조건 추가하기

리스트 내포에는 특정 조건을 추가할 수도 있습니다. 그 방법은 아래와 같습니다. 

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

예제를 통해 살펴보겠습니다. 만약 미터에서 센티미터 변환시 홀수만 변환한다는 조건을 추가해보려면 어떻게 해야할까요?

# 리스트 내포를 활용한 원소 단위 변환 (m -> cm) 홀수만

>>> meter_list = [3, 7, 9, 10] 
>>> centi_meter_list = [100*i for i in meter_list if i%2 != 0] 
>>> print(centi_meter_list) 

[300, 700, 900]   

 

위 코드에 맨 마지막에 if i%2 != 0 라는 조건문을 추가로 입력하였습니다. 결과적으로 10은 제외가 된 것을 확인하실 수 있습니다.


리스트 내포를 활용한 이중 for문

그렇다면 만약 이중 반복문을 구현하고 싶을때는 어떻게 해야할까요? 이를 위해 1부터 10까지의 구구단을 출력하는 for문을 작성해보겠습니다.

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

 

이중 포문을 리스트 내포 기법을 활용하면 아래와 같이 정리할 수 있습니다. 바깥쪽의 for문이 앞쪽으로, 안쪽의 for문이 뒤쪽으로 가는 구조입니다. 

result = [x * y for x in range(1, 10) for y in range(1, 10)] 


여기에 조건을 추가해봅시다. 만약 짝수단만 출력한다고 하면 for문은 아래와 같을 것입니다.

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

 

이중 포문을 리스트 내포 기법을 활용하면 아래와 같이 정리할 수 있습니다. 마찬가지로 바깥쪽에 있는 for문 if문 순서대로 앞쪽으로 간다고 생각하시면 되겠습니다.

>>> result = [x * y for x in range(1, 10) if x%2 == 0 for y in range(1, 10)] 

[2, 4, 6, 8, 10, 12, 14, 16, 18, 4, 8, 12, 16, 20, 24, 28, 32, 36, 6, 12, 18, 24, 30, 36, 42, 48, 54, 8, 16, 24, 32, 40, 48, 56, 64, 72] 


리스트 내포 기법은 파이썬 코드를 보면 종종 등장하는 개념이니 꼭 숙지해두시길 바랍니다!

반응형