¿Cómo obtener el elemento señalado actualmente por el iterador sin incrementar?

¿Hay alguna forma de que un iterador señale el elemento en python sin incrementar el propio iterador? Por ejemplo, ¿cómo implementaría lo siguiente con iteradores?

looking_for = iter(when_to_change_the_mode)
for l in listA:
    do_something(looking_for.current())
    if l == looking_for.current():
        next(looking_for)

preguntado el 02 de julio de 12 a las 15:07

4 Respuestas

Los iteradores no tienen forma de obtener el valor actual. Si desea eso, mantenga una referencia a él mismo, o envuelva su iterador para conservarlo por usted.

Respondido 02 Jul 12, 15:07

looking_for = iter(when_to_change_the_mode)
current = next(looking_for)
for l in listA:
    do_something(current)
    if l == current:
        current = next(looking_for)

Pregunta: ¿Qué pasa si al final del iterador? El next función permite un parámetro predeterminado.

Respondido 02 Jul 12, 16:07

@glglgl Gracias, lo cambiaré. - marco de ingenio

¿Cómo verificar si tiene una próxima iteración? - e-info128

No creo que haya una forma integrada. Es bastante fácil envolver el iterador en cuestión dentro de un iterador personalizado que almacena en búfer un elemento.

Por ejemplo: ¿Cómo anticipar un elemento en un generador de Python?

contestado el 23 de mayo de 17 a las 12:05

Cuando necesitaba hacer esto, lo resolví creando una clase como:

class Iterator:
    def __init__(self, iterator):
        self.iterator = iterator
        self.current = None
    def __next__(self):
        try:
            self.current = next(self.iterator)
        except StopIteration:
            self.current = None
        finally:
            return self.current

De esta manera, puede usar next (itr) como para el iterador estándar, y puede obtener el valor actual llamando a itr.current.

Respondido el 17 de diciembre de 19 a las 09:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.