繁体   English   中英

Python将两个列表元素明智地相乘-其中一个嵌套

[英]python multiply two lists element wise - one of them is nested

我有两个清单:

C = [3, 2, 1]
D = [[0, 1, 2, 3], [0, 1, 2], [0, 1]]

我想达到这个结果:

E = [[0, 3, 6, 9], [0, 2, 4], [0, 1]]

仅使用列表理解。是否可以? 我被困在:

E = zip(C, D)
[i * E[0][0] for i in E[0][1]] which gives:

[0, 3, 6, 9]

但我无法修改它以申请第二个列表的其他元素

对的,这是可能的:

>>> [[c * d_i for d_i in d] for c, d in zip(C, D)]
[[0, 3, 6, 9], [0, 2, 4], [0, 1]]

您只需要两个循环,第一个循环遍历zip(C, D) ,第二个循环遍历D每个列表

您快到了:这是一个嵌套的列表理解。 拍拍另一个列表,[blaj [j] in j in]

C = [3, 2, 1]
D = [[0, 1, 2, 3], [0, 1, 2], [0, 1]]

E = zip(C, D)
print [[i * E[j][0] for i in E[j][1]] for j in range(len(E))]

输出:

[[0, 3, 6, 9], [0, 2, 4], [0, 1]]

如果使用numpy数组,这将很简单:

import numpy as np
np.array(C) * np.array(map(np.array, D))

# array([array([0, 3, 6, 9]), array([0, 2, 4]), array([0, 1])], dtype=object)

我也可以使用itertools.startmap解决它:

>>> from itertools import starmap
>>>
>>> def multiply(x, lst):
        return [x*i for i in lst]

>>> for item in it.starmap(f, zip(C,D)):
        print(item)


[0, 3, 6, 9]
[0, 2, 4]
[0, 1]

要么:

>>> l = []
>>> for item in it.starmap(lambda x,y: [x*i for i in y], zip(C,D)):
        l.append(item)
>>> l
[[0, 3, 6, 9], [0, 2, 4], [0, 1]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM