Backend/🐍 Python
[파이썬] 2차원 리스트를 1차원 리스트로 만들기
Hugehoo
2020. 12. 30. 23:19
2차원 리스트를 1차원 리스트의 형태로 만드는 것을 flatten이라 부른다.
즉 matrix(2차원 배열)를 리스트(1차원 배열) 형태로 만드는 것이다.
my_list = [[1, 2], [3, 4], [5, 6]]
방법 1 - sum 함수
answer = sum(my_list, [])
print(answer)
>>> [1, 2, 3, 4, 5, 6]
itertools 라이브러리 활용
방법 2 - itertools.chain
print(list(itertools.chain(*board)))
>>> [1, 2, 3, 4, 5, 6]
또한, itertools 라이브러리에는 iterable한 객체를 연결하여 반환하는 itertools.chain() 함수가 있다.
itertools.chain() 메서드 인자의 iterable 원소를 연결하여 반환해준다.
* 단, 2차원 배열 형태가 그대로 들어가면 안된다. asterisk(*)를 사용하여 2차원 배열을 unpacking후 원소를 연결해준다.
* list로 감싸지 않으면 hash값만 출력된다. 우리가 원하는 건 list결과값이기에 꼭 list()를 씌워주자.
방법 3 - itertools.chain.from_iterable
import itertools
print(list(itertools.chain.from_iterable(board)))
>>> [1, 2, 3, 4, 5, 6]
방법 2 에선 asterisk 를 사용한 unpacking 과정을 꼭 거쳐야한다. 이런 과정이 귀찮다면, from_iterable() 메서드를 사용하면 된다.
reduce(집계 함수, 순회 가능 데이터[, 초기값]) # 순회 가능 데이터: iterables
방법 4 - reduce 함수 (1)
from functools import reduce
print(list(reduce(lambda x, y: x+y, my_list)))
>>> [1, 2, 3, 4, 5, 6]
방법 5 - reduce 함수 (2)
operator.add(x, y)는 x+y 표현식과 동등하다. 즉 위의 방법 4의 lambda x, y: x + y 가 operator.add의 역할을 한다.
from functools import reduce
import operator
print(list(reduce(operator.add, my_list)))
>>> [1, 2, 3, 4, 5, 6]