Python

[Python] 2차원 배열을 1차원 배열로 변환

비번변경 2022. 7. 1. 21:59

2차원 배열을 1차원 배열로 변환

프로그래밍을 하다 보면 2차원 배열을 1차원 배열로 변환해야 할 때가 있다.

보통 아래와 같이 반복문을 사용해서 리스트를 누적시키는데, 이 외의 방법을 정리한다.

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

for element in my_list:
    answer += element

 

 

sum(iterable, start)

sum 함수는 매개변수로 전달받은 start에 iterable의 모든 데이터를 더한다.

list1 = [[1, 10], [2, 22], [3, 19], [4, 7]]
list2 = sum(list1, [])
print(list2)

위 코드에서 sum(list1, [])은 [] + [1, 10] + [2, 22] + [3, 19] + [4, 7]와 같은 연산을 수행한다.

sum(iterable, start)

 

 

list comprehension

리스트 컴프리헨션을 사용하여 2차원 배열을 1차원 배열로 변환할 수 있다.

list1 = [[1, 10], [2, 22], [3, 19], [4, 7]]
list2 = [data for inner_list in list1 for data in inner_list]
print(list2)

list comprehension

 

 

itertools.chain(*)

itertools.chain은 매개변수로 전달받은 iterable 데이터를 연결하여 반환한다. 전달할 매개변수 앞에 *를 붙여주어야 한다.

import itertools

list1 = [[1, 10], [2, 22], [3, 19], [4, 7]]
list2 = list(itertools.chain(*list1))
print(list2)

itertools.chain(*)

 

 

itertools.chain.from_iterable()

itertools.chain.from_iterable()을 사용하면 * 없이 인자를 전달할 수 있다.

import itertools

list1 = [[1, 10], [2, 22], [3, 19], [4, 7]]
list2 = list(itertools.chain.from_iterable(list1))
print(list2)

itertools.chain.from_iterable()

 

 

functools.reduce()

여러 데이터를 대상으로 누적 집계를 내기 위해 사용하는 reduce 함수를 사용할 수도 있다.

from functools import reduce
import operator

list1 = [[1, 10], [2, 22], [3, 19], [4, 7]]
list2 = list(reduce(operator.add, list1))
print(list2)


# 또는
list2 = list(reduce(lambda x, y: x+y, list1))
print(list2)

functools.reduce()

 

 

numpy.concatenate()

numpy.concatenate()는 2차원 배열을 연결하여 1차원 배열로 만들어준다.

import numpy as np

list1 = [[1], [2, 22], [3, 19], [4, 7]]
list2 = np.concatenate(list1).tolist()
print(list2)

numpy.concatenate()

 

 

numpy.flatton()

numpy.flatton()을 사용할 수도 있다. 단 flatton은 각 행의 길이가 동일한 경우에만 사용할 수 있다. [['A', 'B'], ['X', 'Y'], ['1']]와 같은 데이터는 1차원 배열로 변환하지 못한다.

import numpy as np

list1 = [[1, 10], [2, 22], [3, 19], [4, 7]]
list2 = np.array(list1).flatten().tolist()
print(list2)

 

 

 

참고 문서

https://codechacha.com/ko/python-flatten-list/

https://programmers.co.kr/learn/courses/4008/lessons/12738