我有两个列表,其中子列表可以有可变长度, 但每个列表具有相同的结构。例如:如何将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]]
我有两个列表,其中子列表可以有可变长度, 但每个列表具有相同的结构。例如:如何将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]]
这可以在与Python一行来完成,通过使用列表comrehensions和zip
内置的,它结合了一个或多个iterables的元素在另一个迭代:
output = [[el1 * el2 for el1, el2 in zip(sublist1, sublist2)] for sublist1, sublist2 in zip(lee, lee2) ]
所以,zip
用在这里外水平来接你们每个子表输入列表,并在内部层面挑选这些子列表中的每个元素。
使用连续的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)
工作答案有什么问题?编写用户代码时是否是错误的?用户转储无法工作的不相关代码会更好吗? –
我的猜测是,downvote是因为你在OP发布了一个MCVE之前发布了一个工作答案...... –
我也这么认为。但正如我所说,如果用户发布一段代码无法接近目标,我有时更喜欢从空白页开始。如果这是规则,那么在该网站上投下大量的积分。 –
的另一种方法模块。
import operator
output = [map(operator.mul, x, y) for x,y in zip(lee, lee2)]
但通常额外的进口不鼓励太多。
它看起来像你希望我们为你写一些代码。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。证明这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出以及实际获得的输出(控制台输出,回溯等)。检查[FAQ]和[问]。 – vaultah