Tengo dos listas que necesito combinar donde la segunda lista tiene cualquier duplicado de la primera lista ignorado. .. Un poco difícil de explicar, así que déjame mostrarte un ejemplo de cómo se ve el código y lo que quiero como resultado.
first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]
# The result of combining the two lists should result in this list:
resulting_list = [1, 2, 2, 5, 7, 9]
Notará que el resultado tiene la primera lista, incluidos sus dos valores "2", pero el hecho de que second_list también tiene un valor adicional de 2 y 5 no se agrega a la primera lista.
Normalmente, para algo como esto, usaría conjuntos, pero un conjunto en first_list eliminaría los valores duplicados que ya tiene. Así que simplemente me pregunto cuál es la mejor / más rápida forma de lograr esta combinación deseada.
Gracias.
second_list
?Respuestas:
Debe agregar a la primera lista los elementos de la segunda lista que no están en la primera; los conjuntos son la forma más fácil de determinar qué elementos son, así:
O si lo prefiere de una sola línea 8-)
fuente
2
en su resultado, cuando debería haber dos de ellos.fuente
set
. 👍Puedes usar conjuntos:
fuente
Puede reducir esto a una sola línea de código si usa numpy:
fuente
fuente
fuente
Lo más simple para mí es:
fuente
TypeError: unhashable type: 'dict'
)También puede combinar las respuestas de RichieHindle y Ned Batchelder para un algoritmo O (m + n) de caso promedio que preserva el orden:
Tenga en cuenta que
x in s
tiene una complejidad en el peor de los casos de O (m) , por lo que la complejidad del peor de los casos de este código sigue siendo O (m * n) .fuente
Esto puede ayudar
La función de unión fusiona la segunda lista con la primera, sin duplicar un elemento de a, si ya está en a. Similar a establecer un operador de unión. Esta función no cambia b. Si a = [1,2,3] b = [2,3,4]. Después de la unión (a, b) hace a = [1,2,3,4] yb = [2,3,4]
fuente
Basado en la receta :
fuente
[1, 2, 2, 5, 7, 9]
fuente