Python: lista de productos sin duplicados

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))
Producción : 

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))
Producción : 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *