* 소개
- 기존에 리스트의 원소를 반복작업으로 추가할 때 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의 배열을 복사한 것이다. 즉 한 행의 원소를 변경하면 다른 행의 원소도 똑같이 변경된다.
참고
'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 |