Sie einen iterator verwenden könnten und verschachtelte Schleifen (einen Iterator, weil es den vorrückenden Schritt vereinfacht) next
mit:
def generator(s, steps):
it = iter(s) # create an iterator over the string
yield next(it) # yield the first item and advance the iterator thereby
for i in steps: # go through the list of steps
for _ in range(i): # advance the iterator by "i" steps without returning
next(it)
yield next(it) # yield again, after the iterator has been advanced.
, die dem erwarteten Ergebnis liefert:
>>> import string
>>> list(generator(string.ascii_lowercase, [0,1,2,3]))
['a', 'b', 'd', 'g', 'k']
Mit itertools.islice
Sie die Vor- und Nachgeben des nächsten Elements vereinfachen könnte:
Sie Iteratoren können Sie immer verwenden normale Indizierung nicht mag
import itertools
def generator(s, steps):
it = iter(s)
yield next(it)
for i in steps:
yield next(itertools.islice(it, i, None))
Falls (vorausgesetzt, Sie haben eine Sequenz, die indiziert werden kann - ein String Werke aber ein Generator würde nicht):
def generator(s, steps):
yield s[0]
idx = 1
for i in steps:
idx += i
yield s[idx]
idx += 1
Sie könnten mit der Veröffentlichung eines [MCVE] beginnen. Ihr Code funktioniert nicht einmal in seinem aktuellen Zustand. –
@Remolten. Dies ist kein Code. Es ist ein Stummel und eine Anforderung, kein Versuch. –
Stack Overflow ist kein Code-Schreibdienst. Bitte versuchen Sie zuerst, Ihr eigenes Problem zu lösen. Wenn Sie bei einem bestimmten Problem hängen bleiben, können Sie gerne zurückkommen und danach fragen. –