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: 1424
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.)

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
narpfel
User
Beiträge: 239
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: 1424
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 14. August 2018, 22:51

Stimmt. :-)

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Sirius3
User
Beiträge: 8598
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