>백엔드 개발 >파이썬 튜토리얼 >PYTHON은 중첩 목록을 평면화합니다.

PYTHON은 중첩 목록을 평면화합니다.

高洛峰
高洛峰원래의
2017-03-03 14:05:201665검색

리스트는 Python에서 가장 자주 사용되는 데이터 유형이며, 표준 라이브러리에는 사용할 수 있는 다양한 함수가 있습니다.

그런데 다차원 목록을 1차원 목록으로 변환하면(이에 대한 수요가 많을지는 모르겠지만) 유용한 기능을 찾기가 정말 쉽지 않습니다. .

Ruby, Mathematica, Groovy 중에 flatten이 있는 것으로 알고 있습니다.

목록의 차원이 적고 규칙적이면 상대적으로 다루기가 쉽습니다

예:

li=[[1,2],[3,4],[5,6]]
print [j for i in li for j in i]
#or
from itertools import chain
print list(chain(*li))
#or
a=[[1,2],[3,4],[5,6]]
t=[]
[t.extend(i) for i in a]
print t
#or
print sum(li,[])

보다 복잡한 경우: li=[1,[2],[[3]],[[4,[5],6 ]]], 위의 방법은 사용하기 쉽지 않으므로 방법을 변경해야 합니다.
은 구조상 트리처럼 보입니다. 디렉토리 순회를 생각하기 쉽기 때문에 다음과 같은 방법이 있습니다.

def flat(tree):
  res = []
  for i in tree:
    if isinstance(i, list):
      res.extend(flat(i))
    else:
      res.append(i)
  return res

중첩 목록은 대괄호 쌍이 너무 많다는 생각도 있습니다. 1차원 목록에는 한 쌍만 있으면 됩니다. 처리하기 쉽습니다

def flatten(seq):
  s=str(seq).replace('[', '').replace(']', '') #当然也可以用正则
  return [eval(x) for x in s.split(',') if x.strip()]

그러나 이 접근 방식은 "[" 또는 "]"를 포함하는 문자열이 나타날 때 쓸모가 없습니다.

다른 방법:

외국 포럼에서 봤어요. 그것도 재귀적이고 한 줄로 할 수 있어요

flat=lambda L: sum(map(flat,L),[]) if isinstance(L,list) else [L]

다음 방법은 Tkinter 모듈을 사용하며 메일링 리스트에서 볼 수 있는 방법입니다. 그게 가능하다는 걸 모르는 학생들이 많을 것 같은데, Python과 함께 나온다고 할 수 있겠네요. Python의 Windows 버전에는 Tkinter 모듈이 포함되어 있지만 Linux에는 기본적으로 Numpy, 파이프 등이 없습니다.

중첩된 튜플에 대해 더 말할 필요는 없습니다.

위의 PYTHON 병합 중첩 목록의 간단한 구현은 편집자가 모든 내용을 귀하와 공유했기 때문에 참고할 수 있기를 바랍니다. 또한 모든 사람이 PHP 중국어 웹사이트를 지원하기를 바랍니다.

PYTHON 중첩 목록 병합과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.