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))
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))
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