python3에서 for 순환으로 목록에 있는 요소의 구덩이를 삭제합니다

2847 단어
for 순환 문장의 대상은 교체 대상입니다. 교체 대상은 실현__iter__ iter 방법을 필요로 하고 하나의 교체기를 되돌려야 합니다. 무엇이 교체기입니까?교체기는 __next__ next 방법만 실현할 수 있다.목록이 왜 교체를 지원하는지 확인하십시오.
x = [1,2,3]
its = iter(x)
# its = x.__iter__()
print(type(its))
# print(its.__next__())
# print(its.__next__())
# print(its.__next__())
print(next(its))
print(next(its))
print(next(its))
결과:
1 2 3
for 문장은 어떻게 순환합니까?단계는 다음과 같습니다.
(1) 대상이 교체 가능한 대상인지 아닌지를 먼저 판단하고, 그렇지 않으면 직접 오류를 보고하고, TypeError 이상을 던진다. 그렇다면 __iter__ iter 방법을 호출하여 교체기를 되돌려준다.
(2) 교체기의 __next__ next 방법을 끊임없이 호출하여 매번 교체기의 값을 순서대로 되돌려준다
(3) 마지막에 교체하고 더 많은 요소가 없으면 이상StopIteration을 던집니다. 이 이상python은 개발자에게 노출되지 않고 스스로 처리합니다.
list1 = [1,2,3,4,5,6]
for i in list1:
    if i == 2:
        list1.remove(i)
    print(i)
print(list1)
결과:
1 2 4 5 6 [1, 3, 4, 5, 6]
두 번째 print 인쇄 결과는 분명히 요소 2의 목록을 삭제한 것이다. 첫 번째 print는 왜 3이 없습니까?for문장을 실행할 때, 선생은 하나의 교체기가 되었기 때문에,next 방법으로 교체기의 값을 순서대로 되돌려줍니다. 목록에서 원소2를 삭제했을 때, 원소3의 인덱스는 원래 원소2의 인덱스로 바뀌었고, 원소3을 원소2의 위치로 앞당겼기 때문에next 방법은 값을 되돌려주지 않았습니다.python에서 iter 함수를 사용하면 질서정연한 집합 형식의 교체기를 얻을 수 있습니다. 저는 개인적으로 교체기를 넥스트 바늘이 있는 단방향 체인 테이블로 이해하고, 얻은 교체기는 체인 테이블의 헤더이며, 헤더 내용은 비어 있으며, 넥스트 바늘은 질서정연한 집합 형식의 첫 번째 요소를 가리킵니다.체인 테이블의 마지막 요소인next 포인터에 접근할 때python은StopIteration을 잘못 보고합니다.

좋은 웹페이지 즐겨찾기