Quiero multiplicar cada número de list1 con cada número de list2.
Por ejemplo: [1,2]*[1,2,3] debería devolver algo como esto: [1,2,3,2,4,6] Solo quiero saber si hay alguna función especial para calcular esto, ya que tomaría mucho tiempo calcular esto usando un bucle for.

0
Sandesh34 8 sep. 2018 a las 19:59

3 respuestas

La mejor respuesta

Un simple comprensión funcionará:

lst1, lst2 = [1, 2], [1, 2, 3]

[x * y for x in lst1 for y in lst2]
# [1, 2, 3, 2, 4, 6]

Para obtener todos los pares (el producto cartesiano) de las dos listas, también puede usar itertools.product:

from itertools import product
[x * y for x, y in product(lst1, lst2)]
# [1, 2, 3, 2, 4, 6]
3
schwobaseggl 8 sep. 2018 a las 17:09

También puede hacer esto usando productos de punto, según lo provisto por numpy (incluyo esto como respuesta porque dijo que está buscando la función especial any , y está buscando optimizar la velocidad, sin embargo Estoy de acuerdo en que no es el método más fácil de leer):

import numpy as np

lst1, lst2 = [1, 2], [1, 2, 3]

np.dot(np.array([lst1]).T, np.array([lst2])).flatten().tolist()
#[1, 2, 3, 2, 4, 6]
1
sacuL 8 sep. 2018 a las 17:08

Prueba esto:

import itertools    

a = [1, 2]
b = [1, 2, 3]
result = []
for n in a:
    m = map(lambda x,y: x*y, b, itertools.repeat(n))
    result.extend(m)
1
m9mhmdy 8 sep. 2018 a las 17:09