2016-11-30 75 views
-3

我有两个列表,其中子列表可以有可变长度, 但每个列表具有相同的结构。例如:如何将Python中两个嵌套列表的元素相乘,其中子列表的长度不相等?

lee =[[1,2,3], [1,2,3,4]] 

lee2=[[7,8,9], [7,8,9,10]] 

欲乘以每个列表的相应元素,得到:

output=[[7,16,27], [7,16,27,40]] 
+8

它看起来像你希望我们为你写一些代码。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。证明这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出以及实际获得的输出(控制台输出,回溯等)。检查[FAQ]和[问]。 – vaultah

回答

1

这可以在与Python一行来完成,通过使用列表comrehensions和zip内置的,它结合了一个或多个iterables的元素在另一个迭代:

output = [[el1 * el2 for el1, el2 in zip(sublist1, sublist2)] for sublist1, sublist2 in zip(lee, lee2) ] 

所以,zip用在这里外水平来接你们每个子表输入列表,并在内部层面挑选这些子列表中的每个元素。

2

使用连续的2 zip交织的列表,然后将列表的元素一衬垫:

lee =[[1,2,3], [1,2,3,4]]  
lee2=[[7,8,9], [7,8,9,10]] 


output = [[a*b for a,b in zip(*l)] for l in zip(lee,lee2)] 

结果:

[[7, 16, 27], [7, 16, 27, 40]] 

对于那些不熟悉listcomps等效方法:

output = [] 
for l1,l2 in zip(lee,lee2): 
    for a,b in zip(l1,l2): 
     output.append(a*b) 
+0

工作答案有什么问题?编写用户代码时是否是错误的?用户转储无法工作的不相关代码会更好吗? –

+2

我的猜测是,downvote是因为你在OP发布了一个MCVE之前发布了一个工作答案...... –

+0

我也这么认为。但正如我所说,如果用户发布一段代码无法接近目标,我有时更喜欢从空白页开始。如果这是规则,那么在该网站上投下大量的积分。 –

1

的另一种方法模块。

import operator 
output = [map(operator.mul, x, y) for x,y in zip(lee, lee2)] 

但通常额外的进口不鼓励太多。

相关问题