es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Intentando eliminar una función utilizando enumerate en bucles.

Actualmente estoy aprendiendo Python, y recientemente supe que hay una función llamada “enumerate”, así que intenté comprenderla mejor encontrando otra forma de resolver este problema de Coursera. Lo que sucede es que estoy tratando de usar la función “remove” para modificar la lista después de duplicarla, de esta manera los bucles “for” no se confunden (iteran la lista original, pero modifico la lista duplicada). ¿Alguien sabe qué hay mal en mi código? Gracias de antemano por la ayuda.

def skip_elements(elements):
    # El código va aquí
    # new_elements=[]
    dup = elements
    for count, val in enumerate(elements):
        # if count % 2 == 0:
        #   new_elements.append(val)
        if count % 2 == 1:
            dup.remove(val)
    # return new_elements
    return dup

print(skip_elements(["a", "b", "c", "d", "e", "f", "g"]))
# Debería ser ["a", "c", "e", "g"]
print(skip_elements(["Naranja", "Piña", "Fresa", "Kiwi", "Durazno"]))
# Debería ser ["Naranja", "Fresa", "Durazno"]
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con el código es que la lista duplicada no está creando una nueva lista, sino que simplemente está creando otra referencia a la misma lista. Por lo tanto, cuando se modifica la lista original, también se modifica la lista duplicada. Una posible solución es crear una nueva lista utilizando la técnica de rebanado (slicing), de la siguiente manera:

    def skip_elements(elements):
        dup = elements[:]
        for count, val in enumerate(elements):
            if count % 2 == 1:
                dup.remove(val)
        return dup
    

    El elements[:] crea una nueva lista con los mismos elementos que la lista original. De esta manera, modificar dup no afectará a la lista original.

Comments are closed.