파이썬에서리스트를 평평하게하는 방법

Aliaksei Yursha 2023년1월30일
  1. 파이썬리스트 얕은 평탄화
  2. 파이썬리스트 딥 플래트 닝
파이썬에서리스트를 평평하게하는 방법

병합은 중첩 목록의 목록을 가져 와서 중첩 목록이없는 다른 데이터 구조로 변환하는 작업입니다.
대신, 처음에 중첩 된 모든 목록의 모든 요소가 포함됩니다.
이러한 데이터 구조를 * flat * 또는 * flattened * 목록이라고합니다.

원래 목록은 첫 번째 수준의 중첩 수준에서만 중첩 목록을 포함 할 수 있습니다.
예를 들어 [[1, 2], [3, 4]]와 같습니다.
그렇지 않으면 두 번째, 세 번째 및 그 이상의 중첩 수준에 대한 목록이 포함됩니다.
예를 들어[[[1], [2]], [3, 4]]와 같습니다.
이러한 목록에는 중첩 된 목록이 * 깊게 * 있다고합니다.

단일 수준의 내포도를 원치 않으면 * shallow * flattening 이라고합니다.
모든 수준의 내포성을 숨기려면 * deep * flattening 이라고합니다.

파이썬리스트 얕은 평탄화

이해하고 시각화하는 간단한 방법은 이중 for 루프를 사용하는 것입니다.

첫 번째 for 루프는 중첩 된 목록을 순회합니다. 두 번째 for 루프는 중첩 된 각 목록의 요소를 반복하여 결과 플랫 목록에 하나씩 추가합니다.

>>> flat_list = []
>>> original_list = [[1, 2], [3, 4]]
>>> for l in original_list:
...   for item in l:
...     flat_list.append(item)
...
>>> flat_list
[1, 2, 3, 4]

위의 방법은 명확하고 읽을 수 있지만 Python의 표현은
한 줄로 동일한 목표를 달성 할 수 있습니다.
여기에 Python의 리스트 내포가 도움이됩니다.

>>> original_list = [[1, 2], [3, 4]]
>>> flat_list = [item for l in original_list for item in l]
>>> flat_list
[1, 2, 3, 4]

단순 목록 자체가 필요하지 않지만 모든 요소를 ​​반복 할 수 있으려면
단일 하위 데이터 구조에서 온 것처럼 모든 하위 목록 중 하나를 사용할 수 있습니다. itertools.chain().

>>> import itertools
>>> original_list = [[1, 2], [3, 4]] 
>>> iterator = itertools.chain(*original_list)
>>> for item in iterator:
...   print(item)
...
1
2
3
4

Python 에서 데이터 분석을위한 오픈 소스 패키지 인 Pandas를 사용하는 경우에도 기본 제공 방법이 있습니다.

>>> from pandas.core.common import flatten
>>> original_list = [[1, 2], [3, 4]]  
>>> flat_list = list(flatten(original_list))
>>> flat_list
[1, 2, 3, 4]

파이썬리스트 딥 플래트 닝

위에서 언급했듯이 깊게 중첩 된 목록이 있으면 얕은 병합이 작동하지 않습니다.
아래 예제와 같이 중첩 수준의 첫 번째 수준 만 * 정지하지 않습니다 *.

>>> deeply_nested_list = [[[1, 2], 3], [4, 5, 6]]
>>> flat_list = [item for l in deeply_nested_list for item in l]
>>> flat_list
[[1, 2], 3, 4, 5, 6]

심층 평 평화를 수행하려면 iteration-utilities PyPI 패키지에서 iteration_utilities.deepflatten()을 사용하십시오.

먼저 PyPI 패키지 자체를 설치하십시오.

$ pip install iteration-utilities

그런 다음 깊이 중첩 된 목록을 평평하게하십시오.

>>> from iteration_utilities import deepflatten
>>> deeply_nested_list = [[[1, 2], 3], [4, 5, 6]]
>>> flat_list = list(deepflatten(deeply_nested_list))
>>> flat_list
[1, 2, 3, 4, 5, 6]

관련 문장 - Python List