首页 > 解决方案 > 如何从一对中的单个元素,从嵌套在父列表中的众多对中生成所有可能组合的列表?

问题描述

我发现自己处于一种独特的情况,我需要将列出的一对数字中的单个元素相乘,其中每对都嵌套在元素的父列表中。例如,我有我的预定义变量:

output = []
initial_list = [[1,2],[3,4],[5,6]]

我正在尝试计算一个输出,使得每个元素都是len(initial_list)每对中单个元素的唯一组合(总是长度)的乘积。使用我的示例initial_list,我希望生成一个长度输出,该输出pow(2 * len(initial_list))对于其中的任何“n”对initial_list(至少 2 对)都是可扩展的。所以在这种情况下,输出的每个元素将如下所示:

output[0] = 1 * 3 * 5
output[1] = 1 * 3 * 6
output[2] = 1 * 4 * 5
output[3] = 1 * 4 * 6
output[4] = 2 * 3 * 5
output[5] = 2 * 3 * 6
output[6] = 2 * 4 * 5
output[7] = 2 * 4 * 6

在我的具体情况下,输出分配的顺序除了 之外无关紧要output[0],我需要等效于 中每对中第一个元素的乘积initial_list。继续生成输出列表以使每个元素都是每个列表中每个元素的唯一组合的最佳方法是什么?

...

我最初的方法包括使用;

from itertools import combinations 
from itertools import permutations
from itertools import product

以某种方式生成每个可能组合的列表,然后将产品相乘并将每个产品附加到输出列表中,但我无法等待成功实施这些工具。从那以后,我尝试创建一个for x in range(2):与嵌套递归调用相结合的递归函数,但我又一次找不到解决方案。

请比我更有经验和更聪明的人帮助我;任何和所有的帮助表示赞赏!谢谢!

标签: pythonpython-3.xlistrecursionnested-lists

解决方案


itertools.product并且math.prod很合身-

from itertools import product
from math import prod

input = [[1,2],[3,4],[5,6]]
output = [prod(x) for x in product(*input)]
print(output)
[15, 18, 20, 24, 30, 36, 40, 48]

推荐阅读