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

  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]

위의 방법은 명확하고 읽을 수 있지만 파이썬의 표현은 한 줄로 동일한 목표를 달성 할 수 있습니다. 여기에 파이썬의 목록 이해가 도움이됩니다.

>>> 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

  • 추가 및 확장 목록 방법의 차이점은 무엇입니까
  • Python의 목록에서 고유 한 값을 얻는 방법