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]
'Study > Python study' 카테고리의 다른 글
[Python(파이썬)] 리스트 가로, 세로 변환 (행, 열 변환) (0) | 2021.09.01 |
---|---|
[Python(파이썬)] 별(Asterisk(*)) 연산자 (0) | 2021.09.01 |
[Python(파이썬)] range, enumerate 함수 (0) | 2021.08.20 |
[Python(파이썬)] 리스트 초기화 (0) | 2021.08.05 |
[Python(파이썬)] 팩토리얼(factorial) 구현 (0) | 2021.07.21 |
댓글