在python中乘以两组数字

时间:2013-12-03 13:42:23

标签: python arrays list loops while-loop

我有两个数字列表,比如[1, 2, 3, 4, 5][7, 8, 9, 10, 11],我想形成一个新列表,其中包含第一个列表中每个成员的产品,第二个列表中的每个成员名单。在这种情况下,新列表中将有5 * 5 = 25个元素。

到目前为止,我一直无法使用while()循环。 这就是我到目前为止所做的:

x = 0
y = 99
results = []
while x < 5:
    x = x + 1
    results.append(x*y)
while y < 11:
    y = y + 1
    results.append(x*y)

5 个答案:

答案 0 :(得分:9)

使用itertools.product生成所有可能的2元组,然后计算其产品:

[x * y for (x, y) in itertools.product([1,2,3,4,5], [7,8,9,10,11])]

答案 1 :(得分:2)

问题是outer product的一个例子。已经使用itertools.product发布的答案也是我这样做的方式。

但是这里有一个numpy的替代方案,它通常比在纯python中处理数字数据更有效。

>>> import numpy as np
>>> x1 = np.array([1,2,3,4,5])
>>> x2 = np.array([7,8,9,10,11])
>>> np.outer(x1,x2)
array([[ 7,  8,  9, 10, 11],
       [14, 16, 18, 20, 22],
       [21, 24, 27, 30, 33],
       [28, 32, 36, 40, 44],
       [35, 40, 45, 50, 55]])
>>> np.ravel(np.outer(x1,x2))
array([ 7,  8,  9, 10, 11, 14, 16, 18, 20, 22, 21, 24, 27, 30, 33, 28, 32,
       36, 40, 44, 35, 40, 45, 50, 55])

答案 2 :(得分:1)

你为什么不尝试旧方法;

list1 = range(1, 100)
list2 = range(10, 50, 5)

new_values = []

for x in list1:
    for y in list2:
        new_values.append(x*y)

答案 3 :(得分:1)

没有任何导入,您可以这样做:

[x * y for x in range(1, 6) for y in range(7, 12)]

或者:

[[x * y for x in range(1, 6)] for y in range(7, 12)]

要拆分不同的倍数,但它取决于您希望得到的结果。

答案 4 :(得分:0)

from functools import partial

mult = lambda x, y: x * y

l1 = [2,3,4,5,5]
l2 = [5,3,23,4,4]

results = []

for n in l1:
    results.extend( map( partial(mult, n) , l2) )

print results