Tengo que buscar en una lista y reemplazar todas las ocurrencias de un elemento con otro. Hasta ahora, mis intentos en el código no me llevan a ninguna parte, ¿cuál es la mejor manera de hacer esto?
Por ejemplo, supongamos que mi lista tiene los siguientes enteros
>>> a = [1,2,3,4,5,1,2,3,4,5,1]
y necesito reemplazar todas las apariciones del número 1 con el valor 10, por lo que la salida que necesito es
>>> a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
Por lo tanto, mi objetivo es reemplazar todas las instancias del número 1 con el número 10.

Respuestas:
fuente
Intente usar una lista de comprensión y el operador ternario .
fuente
a¿verdad? Creo que OP queríaacambiaradebería mutar, pero (como lo muestra Alekhya) es trivial manejar cualquier caso cuando se utiliza una lista de comprensión.a, debe hacerloa[:] = [4 if x==1 else x for x in a](tenga en cuenta el segmento de la lista completa). Simplemente haciendoa =esto creará una nueva listaacon unaid()(identidad) diferente de la originalLa comprensión de la lista funciona bien, y recorrerla con enumerate puede ahorrarle algo de memoria (b / c, la operación se realiza esencialmente en el lugar).
También hay programación funcional. Ver uso del mapa :
fuente
lambdaymapse consideran antifónicos.Si tiene varios valores para reemplazar, también puede usar un diccionario:
fuente
nno se encuentra endic?nno se encuentra. Espero que no te moleste. Tutry/exceptsolución no fue buena.try-exceptes al menos un 50% más rápido! Eche un vistazo a esta respuestaif n in dic.keys()es malo en cuanto a rendimiento. Usarif n in dicodic.get(n,n)(valor predeterminado)fuente
Puede usar un bucle for y or while; sin embargo, si conoce la función incorporada Enumerate, se recomienda usar Enumerate. 1
fuente
Para reemplazar fácilmente a todos
1con10ena = [1,2,3,4,5,1,2,3,4,5,1]uno podría usar la siguiente combinación de una línea lambda + mapa, y 'Look, Ma, no hay FI o de Fors!' :# This substitutes all '1' with '10' in list 'a' and places result in list 'c':c = list(map(lambda b: b.replace("1","10"), a))fuente
lambdaelemento de cada lista ...El siguiente es un método muy directo en Python 2.x
Este método funciona Comentarios son bienvenidos Espero eso ayude :)
Prueba también la comprensión de cómo Outis de y de damzam soluciones de trabajo. Las compresiones de listas y la función lambda son herramientas útiles.
fuente
En listas largas y casos raros, su uso es aproximadamente 3 veces más rápido
list.index(), en comparación con los métodos de iteración de un solo paso presentados en las otras respuestas.fuente
Sé que esta es una pregunta muy antigua y hay muchas formas de hacerlo. El más simple que encontré está usando el
numpypaquete.fuente
Mi caso de uso estaba reemplazando
Nonecon algún valor predeterminado.He cronometrado enfoques para este problema que se presentaron aquí, incluido el de @kxr - using
str.count.Código de prueba en ipython con Python 3.8.1:
Yo obtengo:
Usar el interno
str.indexes, de hecho, más rápido que cualquier comparación manual.No sabía si la excepción en la prueba 4 sería más laboriosa que usarla
str.count, la diferencia parece insignificante.Tenga en cuenta que
map()(prueba 6) devuelve un iterador y no una lista real, por lo tanto, la prueba 7.fuente
Simplemente puede usar la comprensión de listas en python:
para su caso, donde desea reemplazar todas las apariciones de 1 por 10, el fragmento de código será así:
fuente
Encuentra y reemplaza solo un artículo
fuente