파 이 썬 은 어떻게 포 함 된 서열 을 전개 합 니까?
여러 겹 으로 포 함 된 시퀀스 를 단일 목록 으로 펼 치 려 고 합 니 다.
해결 방안
이 문 제 를 쉽게 해결 하기 위해 yield from 문 구 를 포함 하 는 재 귀 생 성 기 를 쓸 수 있 습 니 다.예 를 들 면:
from collections import Iterable
def flatten(items, ignore_types=(str, bytes)):
for x in items:
if isinstance(x, Iterable) and not isinstance(x, ignore_types):
yield from flatten(x)
else:
yield x
items = [1, 2, [3, 4, [5, 6], 7], 8]
# Produces 1 2 3 4 5 6 7 8
for x in flatten(items):
print(x)
위의 코드 에서isinstance(x, Iterable)
어떤 요소 가 교체 가능 한 지 확인 합 니 다.그렇다면yield from
모든 하위 루틴 의 값 을 되 돌려 줍 니 다.결국 결 과 를 되 돌려 주 는 것 은 끼 워 넣 지 않 은 간단 한 서열 이다.추가 매개 변수
ignore_types
와 검 측 문isinstance(x, ignore_types)
은 문자열 과 바 이 트 를 교체 가능 한 대상 에서 제외 하고 하나의 문자 로 펼 치지 않도록 합 니 다.이렇게 되면 문자열 배열 은 결국 우리 가 원 하 는 결 과 를 되 돌 릴 수 있 습 니 다.예 를 들 면:
>>> items = ['Dave', 'Paula', ['Thomas', 'Lewis']]
>>> for x in flatten(items):
... print(x)
...
Dave
Paula
Thomas
Lewis
>>>
토론 하 다.문장
yield from
은 생 성기 에서 다른 생 성 기 를 하위 루틴 으로 호출 하려 고 할 때 매우 유용 하 다.만약 네가 그것 을 사용 하지 않 는 다 면,반드시 추가for
순환 을 써 야 한다.예 를 들 면:
def flatten(items, ignore_types=(str, bytes)):
for x in items:
if isinstance(x, Iterable) and not isinstance(x, ignore_types):
for i in flatten(x):
yield i
else:
yield x
조금 만 고 쳤 지만yield from
문 구 는 더 좋아 보이 고 코드 를 더욱 간결 하고 상쾌 하 게 만 들 었 다.이전에 언급 한 문자열 과 바이트 에 대한 추가 검 사 는 그것들 을 다시 하나의 문자 로 전개 하 는 것 을 방지 하기 위 한 것 이다.펼 치고 싶 지 않 은 다른 유형 이 있다 면 인자
ignore_types
를 수정 하면 됩 니 다.마지막 으로 주의해 야 할 것 은
yield from
협 정과 생 성 기 를 바탕 으로 하 는 병행 프로 그래 밍 에서 더욱 중요 한 역할 을 하고 있다 는 것 이다.이상 은 파 이 썬 이 끼 워 넣 은 서열 을 어떻게 전개 하 는 지 에 대한 상세 한 내용 입 니 다.파 이 썬 이 끼 워 넣 은 서열 을 전개 하 는 데 관 한 자 료 는 다른 관련 글 에 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.