Este artículo se centra en una de las operaciones de obtener la lista única de una lista que contiene un posible duplicado y encontrar su producto. Esta operación tiene un gran no. de aplicaciones y por lo tanto es bueno tener su conocimiento.
Método 1: método
ingenuo En el método ingenuo, simplemente recorremos la lista y agregamos la primera aparición del elemento en la nueva lista e ignoramos todas las demás apariciones de ese elemento en particular. La tarea de realizar el producto se realiza mediante bucle.
Python3
# Python 3 code to demonstrate # Duplication Removal List Product # using naive methods # getting Product def prod(val) : res = 1 for ele in val: res *= ele return res # initializing list test_list = [1, 3, 5, 6, 3, 5, 6, 1] print ("The original list is : " + str(test_list)) # using naive method # Duplication Removal List Product res = [] for i in test_list: if i not in res: res.append(i) res = prod(res) # printing list after removal print ("Duplication removal list product : " + str(res))
The original list is : [1, 3, 5, 6, 3, 5, 6, 1] Duplication removal list product : 90
Método 2: Uso de la comprensión de listas
Este método funciona de manera similar al método anterior, pero esto es solo una abreviatura de una línea de un método más largo realizado con la ayuda de la comprensión de listas.
Python3
# Python 3 code to demonstrate # Duplication Removal List Product # using list comprehension # getting Product def prod(val) : res = 1 for ele in val: res *= ele return res # initializing list test_list = [1, 3, 5, 6, 3, 5, 6, 1] print ("The original list is : " + str(test_list)) # using list comprehension # Duplication Removal List Product res = [] [res.append(x) for x in test_list if x not in res] res = prod(res) # printing list after removal print ("Duplication removal list product : " + str(res))
The original list is : [1, 3, 5, 6, 3, 5, 6, 1] Duplication removal list product : 90
Método 3: Usar set() y functools.reduce() [Intermedio]
Verificar la membresía de la lista es O(n) en promedio, por lo que construir la lista de no duplicados se convierte en una operación O(n 2 ) en promedio. Uno puede transformar una lista en un conjunto para eliminar los duplicados, lo cual es una complejidad O (n). Después de esto, el producto de los elementos del conjunto se puede calcular de la manera habitual al iterarlos o, para reducir aún más el código, se puede usar el método reduce() del módulo functools. Como explica la documentación:
Aplique la función de dos argumentos de forma acumulativa a los elementos de iterable, de izquierda a derecha, para reducir el iterable a un solo valor.
Así es como el código se puede reducir a un par de líneas.
Python3
import functools functools.reduce(lambda x, y: x*y, set([1, 3, 5, 6, 3, 5, 6, 1]), 1)
Lo que esto hace es aplicar una lambda al conjunto obtenido de la lista. La lambda toma dos argumentos x e y y devuelve el producto de los dos números. Esta lambda se aplica a todos los elementos de la lista de forma acumulativa, es decir
lambda(lambda(lambda(1, 3), 5), 6)….
lo que produce el producto final como 90. Siempre es prudente agregar un argumento inicial a la función reduce() para manejar secuencias vacías de modo que se pueda devolver el valor predeterminado. En este caso, dado que es un producto, ese valor debería ser 1. Por lo tanto, algo como
functools.reduce(lambda x,y: x*y, set([]), 1)
produce la salida 1, a pesar de que la lista está vacía. Este argumento inicial se agrega antes de los valores en la secuencia y la lambda se aplica como de costumbre.
lambda(lambda(lambda(lambda(1,1 ), 3), 5), 6)….
Publicación traducida automáticamente
Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA