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

244
Vistas
¿Por qué salir de la lista original hace que la lista inversa (original_list) esté vacía?

Tengo el siguiente código:

 s = [1,2,3] t = reversed(s) for i in t: print(i) # output: 3,2,1

Si saco un elemento de s (original), entonces la t (invertida) se vacía:

 s = [1,2,3] t = reversed(s) s.pop() for i in t: print(i) # expected output: 2, 1 # actual output (nothing):

¿Por qué pasó esto?

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

0

la llamada reversed devuelve un iterador sobre esa lista, que es un objeto especial que le permite iterar en orden inverso sobre la lista original, no es una lista nueva y solo se usa una vez

 >>> s= [1,2,3] >>> t = reversed(s) >>> t <list_reverseiterator object at 0x00000261BE8F0C40> >>> list(t) [3, 2, 1] >>> list(t) [] >>>

y debido a que este iterador hace referencia a la lista original, cualquier cambio en él se refleja cuando itera sobre el iterador más adelante.

Actualizar

En particular, y como explica MZ, si ese cambio es tal que el estado de la lista es diferente de cuando se creó el iterador, no obtiene nada si el tamaño disminuye o una versión incompleta de la lista si aumenta

 >>> s= [1,2,3] >>> t = reversed(s) >>> s.insert(0,23) >>> s [23, 1, 2, 3] >>> list(t) [2, 1, 23] >>> t = reversed(s) >>> s.append(32) >>> list(t) [3, 2, 1, 23] >>> s [23, 1, 2, 3, 32] >>> t = reversed(s) >>> s.pop() 32 >>> list(t) [] >>>
over 4 years ago · Santiago Trujillo Denunciar

0

Echando un vistazo al código cpython en GitHub , podemos intuir por qué ya no funciona.

El iterador que se devuelve esencialmente requiere conocer la posición del último índice y la longitud de la matriz. Si se cambia el tamaño de la matriz, el iterador ya no funcionará.

Prueba 1: aumentar la longitud de la matriz

Esto tampoco producirá los resultados correctos, pero el iterador se ejecuta:

 s = [1,2,3] t = reversed(s) s.append(4) for i in t: print(i) # output: [3, 2, 1]

Prueba 2: Disminuir, luego aumentar la longitud

 s = [1,2,3] t = reversed(s) s.pop() s.append(4) for i in t: print(i) # output: [4, 2, 1]

¡Aún funciona!

Entonces, hay una verificación interna para ver si el último índice sigue siendo válido o no, y si lo es, es un ciclo for simple hasta el índice 0.

Si no funciona, el iterador regresa vacío.

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