按列表乘以列表列表

时间:2014-11-11 00:02:27

标签: list python-2.7 multiplying

我希望将([2,3,6],[3,4,9],[4,8,13])等列表列表乘以另一个列表,该列表也具有相同的数量列表作为第一组列表,即,第一列表列表可以具有3个列表,每个列表具有5个数字的列表,但是第二列表将具有3个数字,每个数字乘以第一列表的行的元素。 e.g

([2,3,6],[3,4,9],[4,8,13]) with [2,3,4]

会导致

([4,6,12],[9,12,27],[16,32,52])

到目前为止我已经

sol = [inv[i]*bb[i] for i in range(len(inv[i]))]
        return sol

其中inv [i]是我的列表列表,bb是我的列表。

我希望这样可以对bb中的任何长度列表进行处理,只要它们的长度相同,就可以使用inv [i]

谢谢你们

更新:

我在pound的解决方案中加入并稍微摆弄了一下

现在打印

[20.0, -9.0, -3.0]
[40.0, -18.0, -6.0]
[40.0, -18.0, -6.0]
[40.0, -18.0, -6.0]
[3.0, -2.0, -0.0]
[40.0, -18.0, -6.0]
[40.0, -18.0, -6.0]
[40.0, -18.0, -6.0]
[-8.0, 4.0, 1.0]
[40.0, -18.0, -6.0]
[40.0, -18.0, -6.0]
[40.0, -18.0, -6.0]

代码:

print (inv[i])

       sol = []
       for i, item in enumerate(inv):
           sol.append(map(lambda x: x*bb[i], item))

           print sol[i]

如何摆脱废话并保留最后3行?

3 个答案:

答案 0 :(得分:0)

import itertools

L = [[2,3,6],[3,4,9],[4,8,13]]
M = [2,3,4]
[[i*j for i,j in zip(subl, subm)] for subl, subm in zip(L, itertools.cycle([M]))]

输出:

Out[101]: [[4, 9, 24], [6, 12, 36], [8, 24, 52]]

没有itertools:

answer = []
for subl in L:
    temp = []
    for i in range(len(subl)):
        temp.append(subl[i] * M[i])
    answer.append(temp)

输出:

In [103]: answer
Out[103]: [[4, 9, 24], [6, 12, 36], [8, 24, 52]]

答案 1 :(得分:0)

big = [[2,3,6],[3,4,9],[4,8,13]]
small = [2,3,4]

res = []

for i, item in enumerate(big):
    res.append(map(lambda x: x*small[i], item))

print res

输出:

[[4, 6, 12], [9, 12, 27], [16, 32, 52]]

答案 2 :(得分:0)

使用numpy库:

import numpy as np
list1 = np.array([[2,3,6],[3,4,9],[4,8,13]])
list2 = np.array([2,3,4])
result = list1 * list2.transpose()
result_list = result.tolist()

或者没有numpy:

list1 = [[2,3,6],[3,4,9],[4,8,13]]
list2 = [2,3,4]
result_list = list1[:]
for i in range(len(list1)):
    result_list[i] = [x * list2[i] for x in result_list[i]]