我有两个数字列表,比如[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)
答案 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