본문 바로가기
Study/Python study

[Python(파이썬)] 2차원 리스트를 1차원으로 만들기

by 파크영 2021. 8. 25.

2차원 리스트를 1차원으로 만들기

test = [[1], [2, 12], [3, 13, 11], [4, 14, 15, 10], [5, 6, 7, 8, 9]]

testresult = [1, 2, 12, 3, 13, 11, 4, 14, 15, 10, 5, 6, 7, 8, 9]

 

2차원 리스트를 1차원으로 만드는 다양한 방법

1. sum 함수를 이용한 방법  - sum(리스트명, []) 
2. itertools를 이용한 방법1  - itertools.chain(*iterables)
3. itertools를 이용한 방법2 - itertools.chain.from_iterable(iterables)
4. list comprehension을 이용한 방법 - reduce(집계 함수, iterable 데이터)
5. reduce를 이용한 방법1 - reduce(집계 함수, iterable 데이터)
6. reduce를 이용한 방법2 - reduce + operator

 

 

1. sum 함수를 이용한 방법 - sum(리스트명, []) 

 

파이썬에서 일차원 리스트 두개를 더하면 하나의 연결된 일차원 리스트가 나온다.

>>> [1, 2] + [3, 4]
# 출력
[1, 2, 3, 4]

따라서 sum을 이용하면 이차원 리스트에서 각 각의 원소인 일차원 리스트를 다 더해 하나의 연결된 일차원 리스트가 나오는 것이다. 

>>> test = [[1, 2], [3, 4], [5, 6]]
>>> sum(test, [])

# 출력
[1, 2, 3, 4, 5, 6]

 

>>> test = [[1], [2, 12], [3, 13, 11], [4, 14, 15, 10], [5, 6, 7, 8, 9]]
>>> sum(test, [])

# 출력
[1, 2, 12, 3, 13, 11, 4, 14, 15, 10, 5, 6, 7, 8, 9]

 


2. itertools를 이용한 방법1 - itertools.chain(*iterables)

 

itertools.chain('ABC','DEF') -> 'A', 'B', 'C', 'D', 'E', 'F'

>>> itertools.chain('ABC','DEF')
<itertools.chain object at 0x03D7C310>
>>> list(itertools.chain('ABC','DEF'))
['A', 'B', 'C', 'D', 'E', 'F']

 

chain을 사용하여 2차원 리스트를 1차원 리스트로 만들때는 1차원 리스트를 얻기 위해 인자로 리스트 앞에 * 를 붙여야 한다.  

>>> import itertools
>>> test = [[1], [2, 12], [3, 13, 11], [4, 14, 15, 10], [5, 6, 7, 8, 9]]
>>> list(itertools.chain(*test))

# 출력
[1, 2, 12, 3, 13, 11, 4, 14, 15, 10, 5, 6, 7, 8, 9]

 


3. itertools를 이용한 방법2 - itertools.chain.from_iterable(iterables)

->  리스트 앞에 '*'를 붙이지 않는 방법

 

itertools.chain(['ABC','DEF']) -> 'A', 'B', 'C', 'D', 'E', 'F'

>>> itertools.chain.from_iterable(['ABC','DEF'])
<itertools.chain object at 0x041D2BE0>
>>> list(itertools.chain.from_iterable(['ABC','DEF']))
['A', 'B', 'C', 'D', 'E', 'F']

 

>>> import itertools
>>> test = [[1], [2, 12], [3, 13, 11], [4, 14, 15, 10], [5, 6, 7, 8, 9]]
>>> list(itertools.chain.from_iterable(test))

# 출력
[1, 2, 12, 3, 13, 11, 4, 14, 15, 10, 5, 6, 7, 8, 9]

 


4. list comprehension을 이용한 방법

 

2중 for문을 돌려서 새로운 리스트에 test의 원소 하나 하나를 추가 한 것이다.

>>> test = [[1], [2, 12], [3, 13, 11], [4, 14, 15, 10], [5, 6, 7, 8, 9]]
>>> [element for testlist in test for element in testlist]

# 출력
[1, 2, 12, 3, 13, 11, 4, 14, 15, 10, 5, 6, 7, 8, 9]

 


5. reduce를 이용한 방법1 - reduce(집계 함수, iterable 데이터)

 

>>> from functools import reduce
>>> reduce(lambda x, y: x+y, [1, 2, 3, 4])
#(((1+2)+3)+4)

# 출력
10

 

>>> from functools import reduce
>>> reduce(lambda x, y: x+y, test)

# 출력
[1, 2, 12, 3, 13, 11, 4, 14, 15, 10, 5, 6, 7, 8, 9]

 

 

6. reduce를 이용한 방법2 - reduce + operator

 

operator.add(a, b) -> a+b 반환

>>> from functools import reduce
>>> import operator
>>> reduce(operator.add, test)

# 출력
[1, 2, 12, 3, 13, 11, 4, 14, 15, 10, 5, 6, 7, 8, 9]

 

댓글