Skip to content
튜토리얼
Python
Python 평면화 리스트: 이 팁으로 코드를 간편하게 만드세요

Python 평면화 리스트: 이 팁으로 코드를 간편하게 만드세요

Python에서 리스트를 평면화하는 것은 개발자가 자주 직면하는 일이다. 리스트의 리스트 또는 중첩된 리스트를 처리할 때 이러한 구조를 하나의 리스트로 평면화하는 필요성은 종종 발생하는 도전 과제이다. 이 기사에서는 리스트 내포, itertools 및 numpy를 비롯한 여러 가지 방법을 사용하여 Python에서 리스트를 평면화하는 다양한 방법을 안내할 것이다.

높은 수준의 프로그래밍 언어인 Python은 리스트 조작을 쉽게 만드는 몇 가지 내장 함수 및 모듈을 제공한다. 그러나 리스트를 평면화하는 데는 내장된 '평면화' 함수가 없다. 하지만 걱정하지 마세요. Python은 이를 달성하기 위한 여러 가지 다른 방법을 제공하기 때문에, 이 기사에서 그 방법들을 알아볼 것이다.

코드 없이 Python Pandas 데이터프레임에서 데이터 시각화를 빠르게 생성하고 싶으신가요?

PyGWalker는 시각화를 통한 탐색적 데이터 분석을 위한 Python 라이브러리입니다. PyGWalker (opens in a new tab)는 판다스 데이터프레임 (및 polars 데이터프레임)을 Tableau 스타일의 사용자 인터페이스로 변환하여 Jupyter Notebook 데이터 분석 및 데이터 시각화 워크플로우를 간소화할 수 있습니다.

데이터 시각화를 위한 PyGWalker (opens in a new tab)

Python에서 리스트 평면화 이해하기

리스트를 평면화하는 방법에 대해 들어가기 전에, 리스트 평면화가 무엇을 의미하는지 이해하는 것이 중요하다. 리스트 평면화는 다차원 또는 중첩된 이터러블을 일차원 리스트로 변환하는 것을 의미한다.

예를 들어, 다음 중첩된 리스트를 고려해보자: [[1, 2, 3], [4, 5], [6, 7, 8, 9]]. 이 리스트의 평면화된 버전은 [1, 2, 3, 4, 5, 6, 7, 8, 9]가 된다. 보다시피 중첩된 구조가 제거되고 모든 요소가 포함된 단일 리스트가 남는다.

리스트 평면화는 데이터 조작 및 전처리에서 흔히 사용되는 작업이며, 특히 데이터 과학 및 기계 학습 작업에서 많이 사용된다. 이 개념을 숙달하는 것은 코딩 인터뷰에서도 인기 있는 질문이므로 상당한 혜택을 얻을 수 있다.

리스트 내포를 사용하여 리스트 평면화하기

리스트 내포는 Python에서 리스트를 만드는 간결한 방법이다. 이는 기존 리스트 (또는 다른 이터러블)를 조건에 따라 기반으로하는 새로운 리스트를 만들 수 있는 구문 구조이다. 리스트 내포는 Python에서 리스트를 평면화하는 데에도 사용될 수 있다.

다음은 리스트 내포를 사용하여 리스트를 평면화하는 방법이다:

nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flattened_list = [item for sublist in nested_list for item in sublist]
print(flattened_list)

이 코드에서 리스트 내포는 중첩된 리스트의 각 하위 리스트와 각 항목에 대해 반복한다. 그 결과 sublists의 모든 항목을 포함하는 새로운 리스트가 생성된다.

리스트 내포는 리스트를 평면화하는 Pythonic한 방법으로, Python의 인터프리터의 기본 최적화 덕분에 일반적인 for 루프보다 일반적으로 빠르다.

itertools를 사용하여 리스트 평면화하기

Python의 itertools 모듈은 이터레이터를 처리하기 위한 도구 세트를 제공한다. 이 도구 중 하나인 chain() 함수는 리스트 평면화에 사용할 수 있다.

itertools.chain() 함수는 여러 이터러블을 인수로 사용하여 입력의 내용을 단일 스트림으로 생성하는 단일 이터레이터를 반환한다. 이는 리스트 평면화에 이상적이다.

다음은 itertools.chain()을 사용하여 리스트를 평면화하는 예제이다:

import itertools
 
nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flattened_list = list(itertools.chain(*nested_list))
print(flattened_list)

이 코드에서 * 연산자는 중첩된 리스트를 chain() 함수의 인수로 언패킹하는 데 사용된다. chain() 함수는 모든 하위 리스트를 하나의 리스트로 결합한다.

itertools.chain() 메소드는 리스트를 평면화하는 데에 강력한 도구이며, 특히 대용량 데이터셋을 다룰 때 메모리를 소비하지 않는 이터레이터를 반환하기 때문에 리스트 내포나 for 루프와 같은 방법보다 효율적이다.

numpy를 사용하여 리스트 평면화하기

numpy는 숫자 연산을 위한 인기있는 Python 라이브러리이다. numpy는 배열을 평면화하는 데 사용할 수있는 flatten() 함수를 제공한다. numpy는 주로 숫자 계산에 사용되지만, flatten() 함수를 사용하여 리스트의 리스트를 평면화하는 데에도 사용할 수 있다.

다음은 numpy의 flatten() 함수를 사용하여 리스트를 평면화하는 방법의 예시이다:

import numpy as np
 
nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flattened_list = np.array(nested_list).flatten().tolist()
print(flattened_list)

이 코드에서 중첩된 리스트는 먼저 np.array() 함수를 사용하여 numpy 배열로 변환된다. 그런 다음 flatten() 함수가 numpy 배열에 대해 호출되어 평면화된다. 마지막으로, 평면화된 numpy 배열은 tolist() 함수를 사용하여 다시 리스트로 변환된다.

numpy의 flatten() 함수는 편리하지만, 비용이 많이 드는 numpy 배열로의 변환으로 인해 비-숫자 데이터에 대해서는 가장 효율적인 방법이 아닐 수 있음에 유의해야한다.

이 기사의 다음 부분에서는 재귀적 평면화 및 기타 방법을 포함하여 Python에서 리스트 평면화하기 위해 다른 방법을 계속 탐색할 것이다. 기대해주십시오!

Python에서 재귀적 평면화하기

이 마크다운 파일에 대한 한국어 번역을 제공해 드리겠습니다. 'import BlogHeader from '../../../components/blog-header'; import BeehiivEmbed from '../../../components/BeehiivEmbed'; import JSONldScript from '../../../components/jsonld-script';'와 같은 코드를 번역하지 마십시오. JSONldScript의 내용을 번역하십시오. frontmatter가 있는 경우 language 매개변수를 일치하는 ko로 번역하십시오. 파일은 다음과 같습니다. 다른 방법은 재귀적 평탄화(recursive flattening)입니다. 이 방법은 깊게 중첩된 목록을 다룰 때 특히 유용합니다. 아이디어는 목록의 요소를 반복하며 각 요소에 대해 목록인 경우 재귀적으로 평탄화하고 그렇지 않으면 결과에 추가하는 것입니다.

다음은 Python에서 재귀적 평탄화를 구현하는 방법의 예입니다:

def flatten_list(nested_list):
    result = []
    for i in nested_list:
        if isinstance(i, list):
            result.extend(flatten_list(i))
        else:
            result.append(i)
    return result
 
nested_list = [[1, 2, [3, 4]], [5, 6], [7, [8, [9]]]]
flattened_list = flatten_list(nested_list)
print(flattened_list)

이 코드에서 flatten_list 함수는 목록을 입력으로 받고 평탄화된 목록을 반환하도록 정의되었습니다. 함수는 입력 목록의 요소를 반복하며 요소가 목록인 경우 해당 목록을 재귀적으로 평탄화하기 위해 자체를 호출합니다.

재귀적 평탄화는 목록을 평탄화하는 강력한 방법이지만, 목록이 너무 깊게 중첩되어 있으면 스택 오버플로 오류가 발생할 수 있다는 점에 유의해야 합니다.

Python의 내장 함수를 사용하여 목록 평탄화하기

Python에는 내장 'flatten' 함수는 없지만, 목록을 평탄화하는 데 사용할 수 있는 여러 내장 함수가 제공됩니다. 그러한 조합 중 하나는 sum() 함수와 목록 내포(list comprehension)입니다.

Python의 내장 함수를 사용하여 목록을 평탄화하는 방법은 다음과 같습니다:

nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flattened_list = sum(nested_list, [])
print(flattened_list)

이 코드에서 sum() 함수는 중첩된 목록의 요소들을 더하기 위해 사용됩니다. sum() 함수의 두 번째 인수는 초기값으로 사용할 빈 목록입니다. sum() 함수는 그런 다음 하위 목록을 연결하여 단일 목록을 형성합니다.

이 방법은 간단하고 내장 함수만 사용하지만, 이전에 설명한 다른 방법들에 비해 효율적이지 않습니다. 특히 큰 목록의 경우, 두 개의 목록을 연결할 때마다 새로운 목록을 생성하기 때문입니다.


이제 Python에서 목록을 평탄화하는 데 관한 일반적인 질문에 답변해 보겠습니다.

FAQ

  1. Python에서 목록을 평탄화하는 것은 무엇인가요?

Python에서 목록을 평탄화하는 것은 다차원 또는 중첩된 목록을 일차원 목록으로 변환하는 것을 의미합니다. 이 작업은 데이터 조작 및 전처리 작업에서 흔히 사용됩니다.

  1. itertools를 사용하여 Python에서 목록을 평탄화하는 방법은 무엇인가요?

itertools 모듈에서 chain() 함수를 사용하여 Python에서 목록을 평탄화할 수 있습니다. chain() 함수는 여러 반복 가능한(iterable)을 인수로 받아 입력의 내용을 단일 항목 스트림으로 생성하는 단일 반복자(iterator)를 반환합니다.

  1. Python에서 flatten()과 flat()의 차이점은 무엇인가요?

flatten() 함수는 numpy 배열의 메서드로, 배열을 한 차원으로 축소한 사본을 반환합니다. 반면, flat은 numpy 배열의 속성(attribute)으로, 배열 위에 반복자(iterator)를 반환합니다. 이 반복자는 Python의 내장 반복자와 유사하게 동작하지만, 배열 요소를 수정하는 데 사용할 수 있습니다.

결론

본 글에서는 목록 평탄화를 위해 목록 내포, itertools, numpy 및 재귀적 평탄화를 포함한 다양한 방법을 Python에서 다루었습니다. 또한 Python에서 목록 평탄화에 대한 일반적인 질문에 답변했습니다. 이러한 방법을 이해하면 목록을 다룰 때 코드를 간소화하고 성능을 향상시킬 수 있습니다.