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.

Actualizar una lista de Python dada una lista de índices.

¿Cómo se actualiza una lista, dada una lista de índices que se deben actualizar?

Por ejemplo, digamos que tenemos una lista

l = ['4', '5', '8', '19', '2', '53', '125']

y

indexes = [0, 1, 4, 5]

Digamos que queremos actualizar estos índices a un int. La lista actualizada deseada será

l = [4, 5, '8', '19', 2, 53, '125']

Sí, podemos hacerlo fácilmente con un bucle como este:

for i in indexes:
    l[i] = int(l[i])

Pero en realidad, algo como esto es un poco más rápido:

l[0] = int(l[0])
l[1] = int(l[1])
l[4] = int(l[4])
l[5] = int(l[5])

La diferencia de velocidad puede no ser notable aquí, ya que solo hay 4 elementos, pero una vez que hay 40 o más, se puede ver la diferencia. Pero también es molesto escribir tantas declaraciones repetitivas.

¿Hay alguna forma de optimizar esto un poco más, tal vez usando map y generando una lista para actualizar la lista (basada solo en índices específicos o algo así)?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, podemos usar map para crear una lista nueva con los valores actualizados y luego reemplazar los índices deseados en la lista original con los valores de la nueva lista. Aquí está el código para hacerlo:

    # lista original e índices a actualizar
    l = ['4', '5', '8', '19', '2', '53', '125']
    indices = [0, 1, 4, 5]
    
    # crear una lista nueva con los valores actualizados usando map
    nuevos_valores = list(map(int, (l[i] for i in indices)))
    
    # reemplazar los índices deseados en la lista original con los nuevos valores
    for i, v in zip(indices, nuevos_valores):
        l[i] = v
    
    print(l)  # salida: [4, 5, '8', '19', 2, 53, '125']
    

    Este método evita tener que escribir muchas declaraciones repetitivas como en el segundo ejemplo anterior, y también es más eficiente que el bucle en el primer ejemplo, ya que solo actualiza los índices deseados en lugar de cada elemento de la lista.

Comments are closed.