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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.)
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

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)
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Stimmt. :-)
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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
Antworten