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]