Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

393
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!