매일 업데이트
2022-11-25 01:15 4 min

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)

이 코드는 기존 리스트를 직접 수정하는 것이 아니라, 주어진 리스트의 요소를 사용하여 새로운 평탄화된 리스트를 생성한다는 점을 유의해야 합니다.

결론

본 튜토리얼을 통해 파이썬에서 리스트를 평탄화하는 다양한 방법을 살펴보았습니다. 위에서 제시된 방법 외에도 다른 여러 방법이 존재할 수 있지만, 설명된 방법들이 가장 쉽고 널리 사용되는 방법이라고 생각됩니다.

즐거운 코딩 되세요! 🙂

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.