파이썬
[파이썬] 2차원 리스트 1차원 리스트로 변환
앤테바
2022. 3. 23. 07:59
반응형
2차원 리스트가 있고, 이를 1차원 리스트로 변환해야 하는 경우가 종종 발생합니다.
2차원 리스트
nums = [
[1, 2, 3],
[4, 5],
[6, 7, 8]
]
1차원 리스트로 변환
nums = [1, 2, 3, 4, 5, 6, 7, 8]
아주 다양한 방법들이 많은데 하나씩 살펴 보겠습니다.
방법1) 반복문
직관적으로 반복문을 이용해서 만듭니다.
빈 리스트에 계속 더해가면서 1차원으로 만들어 가는 방식입니다.
nums = [
[1, 2, 3],
[4, 5],
[6, 7, 8]
]
nums_flat = []
for arr in nums:
nums_flat += arr
print(nums_flat)
출력
[1, 2, 3, 4, 5, 6, 7, 8]
방법2) sum()
방법1의 반복문 기법을 자세히 살펴 보시면 [] 빈 리스트에 리스트를 계속 더해가는 방식입니다.
sum() 함수로 반복문을 대체 할 수 있습니다. sum() 함수의 두 번째 인자(start)에 초기값을 지정할 수 있는데 default로 0인데 이를 []를 넘겨주면 방법1과 동일한 수행하게 됩니다.
nums = [
[1, 2, 3],
[4, 5],
[6, 7, 8]
]
num_flat = list(sum(nums, []))
print(num_flat)
출력
[1, 2, 3, 4, 5, 6, 7, 8]
방법3) itertools.chain
itertools.chain을 이용해서 iterable한 객체들을 체인처럼 연결하는 함수입니다.
chain()에 iterable 객체를 넘길 때 unpacking해서 넘겨야 합니다.
import itertools
nums = [
[1, 2, 3],
[4, 5],
[6, 7, 8]
]
nums_flat = list(itertools.chain(*nums))
print(nums_flat)
출력
[1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain.from_iterable() 함수도 사용 가능합니다.
import itertools
nums = [
[1, 2, 3],
[4, 5],
[6, 7, 8]
]
nums_flat = list(itertools.chain.from_iterable(nums))
print(nums_flat)
출력
[1, 2, 3, 4, 5, 6, 7, 8]
방법4) list comprehensin
nums = [
[1, 2, 3],
[4, 5],
[6, 7, 8]
]
nums_flat = [n for arr in nums for n in arr]
print(nums_flat)
출력
[1, 2, 3, 4, 5, 6, 7, 8]
방법5) reduce()
동작은 sum()과 동일하게 보면 될 것 같습니다.
reduce syntax
reduce(집계 함수, 순회 가능한 데이터[, 초기값])
from functools import reduce
nums = [
[1, 2, 3],
[4, 5],
[6, 7, 8]
]
nums_flat = list(reduce(lambda x, y: x + y, nums))
print(nums_flat)
출력
[1, 2, 3, 4, 5, 6, 7, 8]
반응형