在python中,将嵌套列表中的元素相乘到特定索引之后

在python中,将嵌套列表中的元素相乘到特定索引之后,python,list,Python,List,我有一个嵌套的列表,我想在一个特定的索引之后,将列表中的所有元素相乘。例如,如果我的列表是这样的,(其中所有元素(a1、f、g等)都是变量) 我希望所有的嵌套元素和第三个元素相乘。 因此,输出将是这样的 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*

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

我希望所有的嵌套元素和第三个元素相乘。 因此,输出将是这样的

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]]

我真的不知道如何开始处理这个问题,因此非常感谢您的帮助。

对于问题的第一部分,您可以使用列表理解来迭代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]]

窃取另一个答案的数据:

>>> from math import prod
>>> A = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]
>>> for a in A:
        a[3:] = prod(a[3:]),

>>> A
[[1, 2, 3, 20], [6, 7, 8, 990]]
在没有上述步骤的情况下:

>>> [[x * m for x in a[:3]] for a in A for m in [prod(a[3:])]]
[[20, 40, 60], [5940, 6930, 7920]]

不确定这是否是您正在寻找的,但您可以使用列表理解和numpy:

from numpy import product

index = 5
A = [[5, 5, 2, 3, 4, 2, 1, 1, 2], [2, 4, 2, 3, 2, 4, 5, 7], [2, 3, 5, 6, 3, 5, 3, 2]]

result = [[b for i, b in enumerate(B) if i < index] + [product(B[index:])] for B in A]

print(result) # [[5, 5, 2, 3, 4, 4], [2, 4, 2, 3, 2, 140], [2, 3, 5, 6, 3, 30]]

你想要什么我不明白。你怎么得到
f*g**2
d**2*g
?这是否意味着
g**2
=
g*g
?将字符串相乘是什么意思?或者是“a1”“a2”等。。。应该是数字变量。好的,我会编辑一秒钟。他们本不想成为严格的人,请浏览、和,看看这个网站是如何工作的,并帮助您改进当前和未来的问题,这可以帮助您获得更好的答案。“演示如何解决此编码问题?”与堆栈溢出无关。您必须诚实地尝试解决方案,然后询问有关实现的特定问题。堆栈溢出并不是为了取代现有的教程和文档。谢谢,这部分功能非常好!
from numpy import product

index = 5
A = [[5, 5, 2, 3, 4, 2, 1, 1, 2], [2, 4, 2, 3, 2, 4, 5, 7], [2, 3, 5, 6, 3, 5, 3, 2]]

result = [[b for i, b in enumerate(B) if i < index] + [product(B[index:])] for B in A]

print(result) # [[5, 5, 2, 3, 4, 4], [2, 4, 2, 3, 2, 140], [2, 3, 5, 6, 3, 30]]
result2 = [[r * R[-1] for r in R[:-1]] for R in result]
print(result2) # [[20, 20, 8, 12, 16], [280, 560, 280, 420, 280], [60, 90, 150, 180, 90]]