나의 지식 보관소
리스트 컴프리헨션 (List Comprehension) 본문
리스트 컴프리헨션
리스트 컴프리헨션은 리스트를 사용할때 선언과 할당을 동시에 한줄로 할수있게 해주는 문법이다.
리스트 컴프리헨션의 기본적인 문법은 다음과 같다.
[ <변수를 활용한 반복될 식> for <변수의 이름> in <iterable 객체> ]
예를 들면 다음 두 표현은 같은 표현이다.
# 이 표현과
size = 10
arr = [0] * size
for i in range(len(arr)):
arr[i] = i * i
# 이 표현은 결과가 같다.
size = 10
arr = [i * i for i in range(size)]
바깥을 감싸는 기호가 []라면 리스트가 만들어지고, {}라면 집합이, {}를 사용하면서 for문 앞에 key: value 쌍을 써주고 사용하는 변수를 두개로 두면 딕셔너리가 만들어진다. ()는 튜플이 아니라 제너레이터가 생성되며 튜플을 생성하려면 다음과 같이 적어주어야한다. tuple( n for n in range(10) )
조건식이 달린 리스트 컴프리헨션
원한다면 리스트 컴프리헨션에 조건문을 활용해서 필터링도 할 수 있다. 그저 간단하게 리스트 컴프리헨션의 끝에 if문을 붙여주기만 하면 된다. 예를 들어서 다음과 같이 짝수만 걸러낼 수 있다.
arr = [i * i for i in range(10) if i % 2 == 0]
print(arr) # [0, 4, 16, 36, 64]
리스트 컴프리헨션 활용
리스트 컴프리헨션을 중첩해서 사용할 수 있다. 예를 들어 2차원의 리스트를 1차원으로 바꾸려면 다음과 같이 중첩된 리스트 컴프리헨션을 사용하면 된다.
arr2 = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]]
arr1 = [ n for row in arr2 for n in row ]
print(arr1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
위 식은 아래의 표현과 같은 결과가 나온다.
arr2 = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]]
arr1 = []
for row in arr2:
for n in row:
arr1.append(n)
print(arr1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
2차원 리스트의 구조를 유지하면서 각 원소의 값을 변경하려면 다음과 같이 할 수 있다.
arr = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]]
SquaredArr = [[n ** 2 for n in row] for row in arr]
print(SquaredArr)
둘의 순서 차이에 유의 하도록하자.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
정적 메서드와 클래스 메서드 ( @staticmethod & @classmethod ) (0) | 2020.09.07 |
---|---|
제너레이터 Generator / 제네레이터 표현식 Generator Expression (0) | 2020.09.06 |
이터레이터 Iterator (0) | 2020.09.04 |
예외 처리 (0) | 2020.07.01 |
__all__ (0) | 2020.07.01 |