데이터/Data Manipulation

[4] Python list comprehension 써보기.

Cho et al. 2022. 5. 29.

파이썬에서 리스트 안에 리스트가 있는, 

"Nested list" 일 때, flatten ( nested list 를 하나의 리스트로 통합하는 ) 을 하는 좋은 방법을 소개한다.

 

1) List comprehension

 

netsted_list = [[1, 2], [3, 4], ["a", "b"]]
new_list = [item for nested_list_sub in nested_list for item in nested_list_sub]

print(new_list)
# output
[1, 2, 3, 4, 'a', 'b']

 

 

리스트(nested_list) 안에 리스트(nested_list_sub)를 하나씩 가지고 와서(item),

새로운 리스트(new_list) 로 받아서 저장해주는 방법이다.

 

List comprehension 은 python 을 사용하면서 느낄 수 있는 가장 'Pythonic' 한 방법 중 하나로, 

리스트를 작업함에 있어 가장 쉽고 빠르게 처리할 수 있는 기능 중 하나이다.

 

new_list=[]

for i in range(0,10):
	new_list.append(i)
   
print(new_list)

# [0,1,2,3,4,5,6,7,8,9]

 

List comprehension 을 이용하면...

 

# Using list comprehension

new_list = [i for i in range(0,10)]
print(new_list)

# [0,1,2,3,4,5,6,7,8,9]

 

의 한 줄로 줄일 수 있다!

 

2) List comprehesion + 조건문 

# Using list comprehension with conditions

new_list = [i for i in range(0,10) if i%2 == 0]
print(new_list)

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

위에서 쓴 것 중에 if 문을 뒤에 넣어 주기만 하면 된다.

 

# Using list comprehension with conditions

new_list = [i if i%2 == 0 else 'Not even' for i in range(0,10)]
print(new_list)

# [0,'Not even',2,'Not even',4,'Not even',6,'Not even',8,'Not even']

if else 도 쓸 수 있다. 

 

3) Nested list 를 flatten 하는 방법 추가 ( Pipe library 이용 )

 

from pipe import *

list([[1, 2], [3, 4], [5,6]] | chain)
# [1, 2, 3, 4, 5, 6]

list((1, 2, 3) | chain_with([4, 5], [6,7]))
# [1, 2, 3, 4, 5, 6, 7]

list([[1, 2], [[[3], [[4]]], [5]]] | traverse)
# [1, 2, 3, 4, 5]

 

4) Flatten 방법 추가

flst = [[1,2,3],[8,9,12,17],[3,7]]
sorted(sum(flst,[]))

댓글