首页 > 解决方案 > 在python中的特定索引之后,在嵌套列表中将元素相乘

问题描述

我有一个嵌套列表,我想在某个索引之后将列表内的所有元素相互相乘。例如,如果我的列表是这样的,(其中所有元素(a1,f,g 等)都是变量)

A=[[a1,a2,a3,f, g, g ],[b1, b2,b3, d, g, d]]

对于所有嵌套元素,我希望将第三个元素相乘。所以输出将是这样的,

A=[[a1,a2,a3,f*g**2], [b1, b2, b3, d**2*g]]

另外,我想知道是否有一种方法可以将剩余元素分别与每个嵌套列表末尾的乘积相乘,

A=[[a1*f*g**2,a2*f*g**2, a3*f*g**2], [b1*d**2*g, b2*d**2*g, b3*d**2*g]]

我不太确定如何开始处理这个问题,因此感谢您的帮助。

标签: pythonlist

解决方案


对于问题的第一部分,您可以使用列表推导来迭代 A 的子列表,然后使用列表索引和 reduce 函数来计算所需内容

import functools

A = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]
B = [sublist[:3] + [functools.reduce(lambda x, y: x*y, sublist[3:])] for sublist in A]

print(B)

对于第二部分,最好使用显式的 for 循环来执行此操作,以便每个子列表的末端元素的乘积仅计算一次

C = []
for sublist in A:
    end_product = functools.reduce(lambda x, y: x*y, sublist[3:])
    C.append([item*end_product for item in sublist[:3]])
print(C)

最后这给了

A = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]
B = [[1, 2, 3, 20], [6, 7, 8, 990]]
C = [[20, 40, 60], [5940, 6930, 7920]]

推荐阅读