Python에서 목록 및 목록 평면화 가이드
2차원 배열을 1차원 배열로 변환하는 다양한 방법
2차원 배열을 1차원 배열로 변환하는 과정을 평탄화(flattening)라고 합니다. 이 작업은 프로그래밍에서 자주 필요하며, 다양한 접근 방식으로 해결할 수 있습니다.
본 튜토리얼에서는 여러 가지 평탄화 기법을 소개하고 각 방법의 작동 원리를 자세히 살펴보겠습니다.
다음 예시를 통해 평탄화가 어떻게 이루어지는지 확인해 보겠습니다.
입력:
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
출력:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1. 반복문(Loop) 활용
가장 기본적인 방법은 반복문을 사용하는 것입니다. 아마 대부분의 독자분들이 이미 이 방법을 떠올리셨을 거라 생각됩니다. 반복문을 사용하여 문제를 해결하는 단계별 과정을 살펴보겠습니다.
- 먼저, 샘플 데이터로 리스트의 리스트를 초기화하고 변수 data에 저장합니다.
- 다음으로, 결과를 저장할 빈 리스트 flat_list를 초기화합니다.
- data 리스트를 순회하며 각 하위 리스트의 모든 요소를 flat_list에 추가합니다.
- 최종적으로 생성된 flat_list를 출력합니다.
아래는 코드로 구현한 예시입니다.
# 데이터와 빈 리스트 초기화
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []
# 데이터 순회
for item in data:
# 각 하위 리스트의 요소를 flat_list에 추가
flat_list += item
# 결과 출력
print(flat_list)
위 코드에서 연결 연산자 대신 별도의 반복문을 사용하여 하위 리스트의 요소를 flat_list에 추가할 수도 있습니다. 또한, 반복문 대신 리스트 컴프리헨션을 사용하여 코드를 간결하게 만들 수도 있습니다. 이러한 방법들은 모두 동일한 결과를 생성합니다.
이제 다른 해결 방법을 살펴보겠습니다.
#2. Itertools 모듈의 chain 함수 사용
Python의 내장 모듈인 itertools에서 제공하는 chain 함수를 활용하여 리스트를 평탄화할 수 있습니다.
chain 함수는 각 하위 리스트를 순회하면서 요소를 순차적으로 반환합니다. 이 함수는 iterable 객체를 반환하므로, 결과를 리스트로 변환해야 합니다.
문제 해결 단계를 상세히 살펴보겠습니다.
- 샘플 데이터로 리스트의 리스트를 초기화하고 변수 data에 저장합니다.
- itertools.chain(*data)를 사용하여 평탄화된 iterable 객체를 생성합니다.
- 결과로 얻은 iterable 객체를 리스트로 변환합니다.
- 최종적으로 평탄화된 리스트를 출력합니다.
다음 코드를 참고하십시오.
# itertools 모듈 임포트 import itertools # 데이터 초기화 data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] # 리스트 평탄화 및 결과 저장 flat_list = itertools.chain(*data) # iterable을 리스트로 변환 및 출력 print(list(flat_list))
#3. 다단계 리스트 평탄화
지금까지 리스트의 리스트를 평탄화하는 방법을 살펴봤습니다. 하지만 다단계로 중첩된 리스트의 경우에는 앞에서 설명한 방법들이 제대로 작동하지 않습니다. 예를 들어 다음 입력을 생각해 보겠습니다.
입력:
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
출력:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
이러한 다단계 리스트는 중첩 깊이를 미리 알 수 없으므로, 재귀 함수를 사용하여 해결해야 합니다.
- 먼저, 예시 데이터와 같이 다단계 리스트를 초기화하고 변수 data에 저장합니다.
- 결과를 저장할 빈 리스트 flat_list를 초기화합니다.
- 주어진 리스트를 평탄화하는 재귀 함수 flatten_list를 정의합니다.
- 함수 내에서 리스트의 각 요소를 순회합니다.
- 만약 요소가 리스트이면, 함수를 해당 요소를 인자로 하여 재귀적으로 호출합니다.
- 만약 요소가 리스트가 아니면, 해당 요소를 flat_list에 추가합니다.
- data를 인자로 하여 flatten_list 함수를 호출합니다.
- 함수 호출 후, flat_list에는 평탄화된 모든 요소가 저장됩니다.
- 마지막으로 flat_list를 출력하여 결과를 확인합니다.
코딩 과정이 조금 복잡해 보일 수 있지만, 차근차근 따라가면 어렵지 않습니다. 아래 코드를 통해 확인해 보세요.
# 데이터와 빈 리스트 초기화
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []
# 재귀 함수 정의
def flatten_list(data):
# 데이터 순회
for element in data:
# 리스트인지 확인
if type(element) == list:
# 현재 요소를 인자로 하여 함수 재귀 호출
flatten_list(element)
else:
flat_list.append(element)
# 리스트 평탄화
flatten_list(data)
# 결과 출력
print(flat_list)
이 코드는 기존 리스트를 직접 수정하는 것이 아니라, 주어진 리스트의 요소를 사용하여 새로운 평탄화된 리스트를 생성한다는 점을 유의해야 합니다.
결론
본 튜토리얼을 통해 파이썬에서 리스트를 평탄화하는 다양한 방법을 살펴보았습니다. 위에서 제시된 방법 외에도 다른 여러 방법이 존재할 수 있지만, 설명된 방법들이 가장 쉽고 널리 사용되는 방법이라고 생각됩니다.
즐거운 코딩 되세요! 🙂