Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

396
Vistas
Impacto de eliminar un elemento de la lista en invertido () en python

Hasta donde yo sé, la función reversed() da un iterador y funciona igual que iter() pero dará los elementos en orden inverso. Sin embargo, enfrenté un comportamiento extraño del objeto que regresa de la función reversed() .

Al mirar:

 lst = ['a', 'b', 'c', 'd'] iter_lst = iter(lst) lst.remove('c') print(list(iter_lst))

salida: ['a', 'b', 'd']

Es tal como se esperaba. pero:

 lst = ['a', 'b', 'c', 'd'] rev_iter_lst = reversed(lst) lst.remove('c') print(list(rev_iter_lst))

salida: []

¿No debería ser: ['d', 'b', 'a'] ?

¿Es algo en la implementación del __reversed__() en el objeto de lista o __next__() en el objeto iterador que evita esto? Quiero decir, si algo cambia en la lista original, tal vez no producirá una secuencia inversa ...

Actualización : publiqué una respuesta que es una posible solución aquí , lo probé pero no sé si hay una situación en la que esta implementación daría un resultado no exceptuado.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

de acuerdo con el código fuente list.__reversed__ , el iterador recuerda la última dirección de índice y devuelve el iterador que recuerda la última dirección de índice. ahora, cuando elimine un elemento, cambiará todos los índices y hará que la última dirección no apunte a ninguna parte y devolverá una lista vacía porque no hay nada sobre lo que iterar. déjame describir más: considera la siguiente lista: lst = ['a','b','c'] también supongamos que lst[0] está en el 100 y cada carácter es un byte, por lo que el carácter 'c' está en el 102. cuando crea un iterador venerado, recordará 102 como el punto de inicio. en el siguiente paso, omitimos 'b' ahora el carácter 'c' está en la dirección 101. y cuando le pida al iterador que itere, comenzará a buscar en la posición 102. ¿Qué encontrará allí? literalmente nada y obviamente devolverá una lista vacía.

Espero que esto pueda ser útil :)

EDITAR: la palabra dirección no es correcta. Debo usar el índice en su lugar ...

over 4 years ago · Santiago Trujillo Denunciar

0

La llamada a la list iterará el iterador inverso, cuya index < PyList_GET_SIZE(seq) seq fallará porque redujo la secuencia mientras tanto, y por lo tanto no producirá un valor sino que se detendrá:

 listreviter_next(listreviterobject *it) { (some checks) index = it->it_index; if (index>=0 && index < PyList_GET_SIZE(seq)) { (decrease the index and return the element) } (stop the iteration) }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda