Python 목록 반복기 동작 및 next(반복기)
고려사항:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
즉, 반복기 진행은 예상대로 동일한 개체를 변환함으로써 처리됩니다.
이런 상황이라면, 나는 다음과 같이 생각할 수 있다.
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
초당 요소를 건너뜁니다: 호출 대상next루프가 발신한 암묵적인 콜이 두 번째로 진행되어 이 두 번째 콜의 결과는 에 할당됩니다.i.
그렇지 않아요.루프는 목록 내의 모든 항목을 건너뛰지 않고 인쇄합니다.
처음에 생각했던 건 루프콜 때문에 이런 일이 일어날 수도 있다는 거였어요iter전달된 내용에 따라, 그리고 이것은 독립된 반복자를 제공할 수 있습니다 - 이것은 사실이 아닙니다.iter(a) is a.
그럼 왜?next이 경우 반복기를 발전시킬 수 없을 것 같습니까?
여기 보이는 것은 인터프리터가 반환값을 에코백하고 있는 것입니다.next()에 더하여i각 반복마다 인쇄됩니다.
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... next(a)
...
0
1
2
3
4
5
6
7
8
9
그렇게0의 출력입니다.print(i),1로부터의 수익률next()인터랙티브 인터프리터 등에 의해 메아리칩니다.반복은 5회뿐입니다.반복할 때마다 단말기에2 행이 써집니다.
의 출력을 할당하는 경우next()예상대로 동작합니다.
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... _ = next(a)
...
0
2
4
6
8
또는 추가 정보를 인쇄하여 차별화할 수 있습니다.print()인터랙티브인터프리터 에코로부터의 출력:
>>> a = iter(list(range(10)))
>>> for i in a:
... print('Printing: {}'.format(i))
... next(a)
...
Printing: 0
1
Printing: 2
3
Printing: 4
5
Printing: 6
7
Printing: 8
9
바꿔 말하면next()는 예상대로 동작하지만 인터랙티브인터프리터에 의해 에코된 반복기에서 다음 값을 반환하기 때문에 루프가 독자적인 반복기 복사본을 가지고 있다고 믿게 됩니다.
무슨 일이 일어나고 있느냐 하면next(a)는 a의 다음 값을 반환합니다.이 값은 영향을 받지 않기 때문에 콘솔에 출력됩니다.
이 값을 사용하여 변수에 영향을 줄 수 있습니다.
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... b=next(a)
...
0
2
4
6
8
I find the existing answers a little confusing, because they only indirectly indicate the essential mystifying thing in the code example: both* the "print i" and the "next(a)" are causing their results to be printed.
원본 시퀀스의 요소를 번갈아 인쇄하고 있으며, "next(a)" 문이 인쇄되는 것은 예상하지 못한 일이기 때문에 "print i" 문이 모든 값을 인쇄하는 것처럼 보입니다.
그 점에서 변수에 "next(a)"의 결과를 할당하는 것이 그 결과의 인쇄를 금지하고, "i" 루프 변수가 인쇄하는 대체 값만 인쇄하는 것이 보다 명확해진다.마찬가지로, "인쇄" 문구를 만들어도 더 독특한 내용을 명확하게 할 수 있습니다.
(기존의 답변 중 하나는 다른 답변에 대해 반박합니다.그 이유는 그 답변이 블록으로 평가된 예제 코드를 가지고 있기 때문에 인터프리터는 "next(a)"의 중간값을 보고하지 않기 때문입니다).
일반적으로 질문에 대답할 때 매혹적인 것은 답을 알고 나면 분명한 것에 대해 명확하게 말하는 것입니다.이해하기 어려울 수 있습니다.마찬가지로 답을 이해하면 비판합니다.신기하다...
아직도 이해하지 못하는 사람들을 위해.
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... next(a)
...
0 # print(i) printed this
1 # next(a) printed this
2 # print(i) printed this
3 # next(a) printed this
4 # print(i) printed this
5 # next(a) printed this
6 # print(i) printed this
7 # next(a) printed this
8 # print(i) printed this
9 # next(a) printed this
이미 다른 사람들이 말했듯이next1번으로 하다반환된 값을 변수에 할당해도 마법처럼 변수의 동작이 변경되지 않습니다.
Python/컴퓨터에 문제가 있습니다.
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
>>>
0
2
4
6
8
예상대로 작동한다.
Python 2.7 및 Python 3+에서 테스트 완료.양쪽에서 정상적으로 동작합니다.
함수로 호출된 경우 다음과 같이 동작합니다.
>>> def test():
... a = iter(list(range(10)))
... for i in a:
... print(i)
... next(a)
...
>>> test()
0
2
4
6
8
언급URL : https://stackoverflow.com/questions/16814984/python-list-iterator-behavior-and-nextiterator
'programing' 카테고리의 다른 글
| WPF: 자동 완성 텍스트 상자, ...다시 (0) | 2023.04.17 |
|---|---|
| Swift에서 UIAlertView를 작성하려면 어떻게 해야 하나요? (0) | 2023.04.17 |
| VBA 텍스트 상자에서 MM/DD/YYY 날짜 형식 지정 (0) | 2023.04.17 |
| 영구 테이블과 동일한 열과 유형을 가진 임시 테이블을 생성하는 가장 좋은 방법 (0) | 2023.04.17 |
| 공백이 있는 여러 줄 문자열(삽입된 부분 보존) (0) | 2023.04.17 |