itertools
설명서의 요리법 섹션에 consume
과 같은 유용한 코드가 있지만 문제를 발견했습니다.itertools.islice의 Python 버전이 작동하지 않는 이유는 무엇입니까?
from itertools import islice
numbers = iter(range(10))
for i in numbers:
print i
next(islice(numbers, 3, 3), None)
위의 코드는 next(islice(numbers, 3, 3), None)
트릭이 consume
조리법에서 가져온 것입니다, 그것은 [0,4,8]
를 인쇄, 잘 작동합니다.
여기서 중요한 역할을하고있는 islice
을 볼 수 있습니다. 내가 그 기능에 대한 파이썬 문서에서 제공하는 코드로 itertools.islice
를 교체 할 때 내가 기대하지만, 코드가 작동하지 않습니다 :
#from itertools import islice
def islice(iterable, *args):
# islice('ABCDEFG', 2) --> A B
# islice('ABCDEFG', 2, 4) --> C D
# islice('ABCDEFG', 2, None) --> C D E F G
# islice('ABCDEFG', 0, None, 2) --> A C E G
s = slice(*args)
it = iter(xrange(s.start or 0, s.stop or 200, s.step or 1))
nexti = next(it)
for i, element in enumerate(iterable):
if i == nexti:
yield element
nexti = next(it)
numbers = iter(range(10))
for i in numbers:
print i
next(islice(numbers, 3, 3), None)
출력 위의 출력 다르다; 모두 범위의 숫자가 인쇄되고 islice()
줄을 사용하면 아무 것도 수행되지 않습니다.
아무도 이유가 설명 될 수 있습니까? 여기에 islice
의 작동 방식을 설명 할 수 있습니까?
오류를 제공합니까? –
@MichaelVayvala : 아니요, 오류는 인쇄되지 않습니다. 출력은 다릅니다. 나는 그것을 명확하게하기 위해 질문을 편집했다. –
예, 이제 알 수 있습니다. –