Tech이야기~!
welcom 자세히보기

Computer/Python

[Python][Listt] 2차원 리스트를 1차원 리스트로

Enhold 2020. 2. 13. 15:04

donaricano-btn donaricano-btn donaricano-btn donaricano-btn

파이썬의 다양한 기능을 사용하면, for 문을 사용하지 않고도 리스트를 이어붙일 수 있습니다.

my_list = [[1, 2], [3, 4], [5, 6]]

# 방법 1 - sum 함수
answer = sum(my_list, [])

# 방법 2 - itertools.chain
import itertools
list(itertools.chain.from_iterable(my_list))

# 방법 3 - itertools와 unpacking
import itertools
list(itertools.chain(*my_list))

# 방법4 - list comprehension 이용
[element for array in my_list for element in array]

# 방법 5 - reduce 함수 이용1
from functools import reduce
list(reduce(lambda x, y: x+y, my_list))

# 방법 6 - reduce 함수 이용2
from functools import reduce
import operator
list(reduce(operator.add, my_list))

# 방법 7 - numpy 라이브러리의 flatten 이용
import numpy as np
np.array(my_list).flatten().tolist()

결과 비교 그래프

출처 : https://winterj.me/list_of_lists_to_flatten/

성능들을 한눈에 알아보기 쉽게 하기 위해 matplotlib를 통해 그래프로 시각화 시켜주었다.


log스케일의 그래프임으로 x축에서 1칸의 차이는 실질적으로 10배의 차이다.
Numpy와 itertools의 차이는 약 100배, Numpy와 sum()의 차이는 1000배 이상이다.