Python | Producto de columna de array de tamaño desigual

La lista de lista habitual, a diferencia de Matrix tipo C convencional, puede permitir la lista anidada de listas con longitudes variables, y cuando requerimos el producto de sus columnas, la longitud desigual de las filas puede llevar a que algunos elementos en esos elementos estén ausentes y si no se maneja correctamente, puede generar una excepción. Analicemos ciertas formas en las que este problema se puede realizar sin errores.

Método n.º 1: Usar bucle + filter() + map()+ comprensión de listas
La combinación de las tres funciones anteriores combinadas con la comprensión de listas puede ayudarnos a realizar esta tarea en particular, la función de producción externa ayuda a realizar la multiplicación, el filtro nos permite verificar los elementos presentes y todas las filas se combinan usando la función de mapa. Funciona solo con python 2.

# Python code to demonstrate 
# Uneven Sized Matrix Column product
# using loop + filter() + map() + list comprehension
  
# getting Product 
def prod(val) : 
    res = 1 
    for ele in val: 
        res *= ele 
    return res 
  
# initializing list of lists
test_list = [[1, 5, 3], [4], [9, 8]]
  
# printing original list 
print ("The original list is : " + str(test_list))
  
# using loop + filter() + map() + list comprehension
# Uneven Sized Matrix Column product
res = [prod(filter(None, j)) for j in map(None, *test_list)]
  
# printing result
print ("The product of columns is : " + str(res))
Producción :

The original list is : [[1, 5, 3], [4], [9, 8]]
The product of columns is : [36, 40, 3]

Método n.º 2: Uso de comprensión de listas + bucle +zip_longest()
Si no se desea jugar con los valores Ninguno, se puede optar por este método para resolver este problema en particular. La función zip_longest ayuda a llenar la columna no presente con 1 para que no tenga que manejar el vacío de elementos no presentes.

# Python3 code to demonstrate 
# Uneven Sized Matrix Column product
# using list comprehension + loop + zip_longest()
import itertools
  
# getting Product 
def prod(val) : 
    res = 1 
    for ele in val: 
        res *= ele 
    return res 
  
# initializing list of lists
test_list = [[1, 5, 3], [4], [9, 8]]
  
# printing original list 
print ("The original list is : " + str(test_list))
  
# using list comprehension + loop + zip_longest()
# Uneven Sized Matrix Column product
res = [prod(i) for i in itertools.zip_longest(*test_list, fillvalue = 1)]
  
# printing result
print ("The product of columns is : " + str(res))
Producción :

The original list is : [[1, 5, 3], [4], [9, 8]]
The product of columns is : [36, 40, 3]

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 *