파이썬에서 리스트 안에 리스트가 있는,
"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,[]))
'데이터 > Data Manipulation' 카테고리의 다른 글
[Pandas] Stratified sampling with pd.DataFrame.sample() (0) | 2022.10.13 |
---|---|
[6] Stratified K-fold 의 여러가지 방법 (0) | 2022.09.06 |
[3] Pandas transform : lambda 대신 데이터프레임에 사용가능, 하지만 더 다양하게. (0) | 2022.05.29 |
[2] Pandas cut : 조건식 있는 loc 대신 쓸 수 있는 방법. (0) | 2022.05.29 |
[1] Pandas query : 한 번만 써보자! (0) | 2022.05.27 |
댓글