Vous pouvez faire un générateur infini qui compte et vers le bas:
def updown(n):
while True:
for i in range(n):
yield i
for i in range(n - 2, 0, -1):
yield i
uptofive = updown(6)
for i in range(20):
print uptofive.next(),
serait sortie:
0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1
Vous ne pouvez pas empêcher list(updown(6))
d'essayer de consommer toute la mémoire, non. Comme le dirait le docteur: "Alors ne fais pas ça!".
Utilisez plutôt les appels .next()
, ou utilisez votre générateur avec une autre instruction qui limite le nombre de fois que vous faites une itération sur le générateur. Le itertools.islice()
function ferait juste que:
import itertools
list(itertools.islice(updown(6), 20))
merci rendre malade deux questions – Max
En outre, si c'est des devoirs, nous apprécierions si vous utilisez le 'devoirs 'tag afin que nous puissions vous aider à apprendre au lieu de simplement transmettre les réponses. –
non, pas un devoir – Max