본문 바로가기

Language/Python

<파이썬> 리스트 컴프리헨션

 

* 소개

 - 기존에 리스트의 원소를 반복작업으로 추가할 때 for문을 사용해서 하나하나 추가했으나, 최근에 문제를 풀며 리스트 컴프리헨션의 필요성을 느꼈다. 반복되는 원소를 넣을 때 리스트 컴프리헨션을 사용하면 한 줄만에 리스트를 초기화 및 제작할 수 있다.

 

 - 리스트 컴프리헨션은 쉽게 말해서 [](대괄호) 안에 반복문을 넣어서 쉽게 원소들을 넣는 것을 일컫는다. 추가적으로 조건문도 사용할 수 있다.

 

array = [i for i in range(5)]

print(array)

# [0, 1, 2, 3, 4]

 

 - 기본적으로 위와 같이 사용한다. 가장 앞의 i는 ',' 를 붙여가며 넣을 원소를 의미한다.

 

 - 뒤의 반복문은 원소를 어떤식으로 바꿔가며 넣을지를 의미한다.

 

 - 가장 쉽게 쓰는 방법은 일단 대괄호를 만들고 for 문을 넣는다. 그리고 앞쪽에 i를 붙이는 것을 추천한다.

 

 

* 조건추가

 - 리스트 컴프리헨션은 조건문도 추가할 수 있다.

 

array = [i for i in range(10) if i % 2 == 0]

print(array)

# [0, 2, 4, 6, 8]

 

 - 뒤의 조건이 참이 되는 값만을 원소로 추가한다.

 

 - 리스트의 remove() 메서드를 사용하면 특정 원소를 제거할 수 있다. 그러나 이 메서드의 단점은 특정원소가 여러 개라도 하나만 제거한다는 점이다. 이 때 리스트 컴프리헨션을 사용할 수 있다.

 

lst = [1, 1, 2, 2, 3, 4, 5, 6]
rm_set = {1, 2, 3}
result = [i for i in lst if i not in rm_set]

print(result)

# [4, 5, 6]

 

 - rm_set에 없는 값만을 골라서 리스트를 만들 수 있게되었다. 참고로 rm_set은 구분을 위해서 집합자료형을 사용하였다.

 

* 이차원 배열

 - 리스트 컴프리헨션이 가장 자주 쓰이는 곳은 역시 이차원 배열이다.

 

 - 리스트 컴프리헨션이 없다면 이차원배열을 초기화하는 것은 최소 4줄 이상일 것이다.

 

 - 행의 갯수가 3이고 열의 갯수가 5인 2차원 배열을 모든 원소가 0인 상태로 만들어보자.

 

row = 3
column = 5
array = [[0] * column for _ in range(row)]
print(array)

# [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

 

 - [0] * 5 는 [0, 0, 0, 0, 0] 이고 리스트 컴프리핸션에 의해서 3개가 생겼다.

 

 - 위를 띄어서 보면 다음과 같을 것이다.

 

# [[0, 0, 0, 0, 0], 
# [0, 0, 0, 0, 0], 
# [0, 0, 0, 0, 0]]

 

 - ([0] * column) * row 를 해도 되지 않을까 하는 의문이 생길 수 있다.

 

 - 비슷한 결과는 나온다. 그러나 이는 같은 길이 5의 배열을 복사한 것이다. 즉 한 행의 원소를 변경하면 다른 행의 원소도 똑같이 변경된다. 

 

 

 


 

 

참고

 

 

 

(이코테 2021) 이것이 취업을 위한 코딩 테스트다 with 파이썬

 

www.youtube.com

 

 

'Language > Python' 카테고리의 다른 글

<파이썬> 문자열과 메서드  (0) 2021.04.25
<파이썬> 2차원 배열 정렬  (1) 2021.04.01
<파이썬 기초> 12. 정규식  (0) 2020.11.03
<파이썬 기초> 11. 튜플  (0) 2020.10.27
<파이썬 기초> 10. 딕셔너리  (0) 2020.10.20