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: 3094
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 14. August 2018, 22:40

@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.)
“In computing, invariants are ephemeral.” – Alan J. Perlis
narpfel
User
Beiträge: 252
Registriert: Freitag 20. Oktober 2017, 16:10

Dienstag 14. August 2018, 22:48

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: 3094
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 14. August 2018, 22:51

Stimmt. :-)
“In computing, invariants are ephemeral.” – Alan J. Perlis
Sirius3
User
Beiträge: 9702
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 15. August 2018, 08:08

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