2011-01-14 14 views
5

Co chcę zrobić, to wydrukować liczby całkowite od 0 do 5 w kodzie poniżej, ale dostaję tylko adres iteratora?Używanie iteratora do drukowania liczb całkowitych

def main(): 

    l = [] 
    for i in range(0,5): 
     l.append(i) 

    it = iter(l) 

    for i in range(0,5): 
     print it 
     it.next() 

if __name__ == '__main__': 
    main() 
+0

Tak wiesz, Wywołanie 'next()' zwraca następną wartość w iteratorze. Ciało pętli powinno więc czytać 'print it.next()'. –

+0

Szybki sposób na tworzenie iteratora: it = iter (zakres (5)) – nakedfanatic

Odpowiedz

9

Aby uzyskać dostęp do wartości zwracanych przez iterator, należy użyć metody iteracyjnej next() tak:

try: 
    while True: 
     val = it.next() 
     print(val) 
except StopIteration: 
    print("Iteration done.") 

next() ma zarówno cel pogłębianie iteracyjnej i powrót następnego elementu. StopIteracja jest generowana po zakończeniu iteracji.

Ponieważ jest to dość kłopotliwe, wszystko to opakowane ładnie się w za-składnię:

for i in it: 
    print(i) 
print("Iteration done.") 

więcej linków:

+0

W pierwszym bloku kodu, czy nie można dołączyć instrukcji try? – pandoragami

+0

Tak, ale wyjątek zostanie rzucony dalej. –

+0

wygląda jak w wersji 3 (lub takiej), którą musisz zmienić obok __next__ – kdubs

3

W przypadku iteratora należy go powtórzyć, nie przekraczając zakresu.

for i in it: 
    print(i) 
+0

Czy istnieje sposób dereferencji iteratora jak w C++ przy użyciu * it? – pandoragami

+0

Nie, Python w ogóle nie używa wskaźników. I dlaczego miałbyś chcieć? Dereferencja służy do uzyskania wartości, a Python już daje ci tę wartość. Staraj się nie myśleć w ogóle w C++ podczas pracy z Pythonem. – Hollister

+1

Python 'it.next()' jest mniej więcej odpowiednikiem C++ '* it ++'. Nie rozdzielasz operacji. –

3

Kiedy używasz dla pętli, w rzeczywistości dzwoni __next__ metodę obiektu iterator w sposób dorozumiany. Więc po prostu nie używałbyś czegoś takiego jak zasięg, ale zamiast tego używałeś samego iteratora.

for i in it: 
    print i 

Na co warto, xrange w Pythonie 2 i range w Pythonie 3 zwraca iterator, tak po prostu napisać swoją pierwszą pętlę z tymi mieć pożądany rozwiązanie

Powiązane problemy