Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

나의 지식 보관소

리스트 컴프리헨션 (List Comprehension) 본문

프로그래밍 언어/파이썬

리스트 컴프리헨션 (List Comprehension)

야식은진리다 2020. 9. 5. 06:58

리스트 컴프리헨션

리스트 컴프리헨션은 리스트를 사용할때 선언과 할당을 동시에 한줄로 할수있게 해주는 문법이다.

리스트 컴프리헨션의 기본적인 문법은 다음과 같다.

 

[ <변수를 활용한 반복될 식> 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)

 

둘의 순서 차이에 유의 하도록하자.