Seite 2 von 2

Re: Liste wieder und wieder durchlaufen bis die Anzahl der zurückgegebenen Elemente stimmt

Verfasst: Dienstag 14. August 2018, 22:40
von __blackjack__
@Atalanttore: Das macht keinen Sinn, warum machst Du das so umständlich? Jetzt hast Du einen zweiten Iterator und ein `i` das Du überhaupt nicht verwendest. Die erste Schleife ist auch unnötig kompliziert. Der Code sollte so aussehen:

Code: Alles auswählen

from itertools import islice, cycle

numbers = list(range(10))
for number in islice(cycle(numbers), 25):
    print(number)
`__iter__()` und `__next__()` sind die Methoden die das iterierbare Objekt und der Iterator haben müssen damit die Funktionen `iter()` und `next()` damit funktionieren. Also das iterierbare Objekt muss `__iter__()` implementieren und der Iterator beides.

(Das stimmt nicht so ganz, weil es noch andere Möglichkeiten gibt ein Objekt iterierbar zu machen, das hat aber eher historischen Wert.)

Re: Liste wieder und wieder durchlaufen bis die Anzahl der zurückgegebenen Elemente stimmt

Verfasst: Dienstag 14. August 2018, 22:48
von narpfel
Man muss noch nichtmal das `range`-Objekt in eine Liste umwandeln:

Code: Alles auswählen

from itertools import islice, cycle

for number in islice(cycle(range(10)), 25):
    print(number)

Re: Liste wieder und wieder durchlaufen bis die Anzahl der zurückgegebenen Elemente stimmt

Verfasst: Dienstag 14. August 2018, 22:51
von __blackjack__
Stimmt. :-)

Re: Liste wieder und wieder durchlaufen bis die Anzahl der zurückgegebenen Elemente stimmt

Verfasst: Mittwoch 15. August 2018, 08:08
von Sirius3
Dass islice schon ein Iterator ist, läßt sich leicht zeigen, indem man schaut, ob `iter` das selbe Element liefert

Code: Alles auswählen

from itertools import islice, cycle

iterator = islice(cycle(range(10)), 25)
print(iterator is iter(iterator))
# > True