python - 如何从一对中的单个元素,从嵌套在父列表中的众多对中生成所有可能组合的列表?
问题描述
我发现自己处于一种独特的情况,我需要将列出的一对数字中的单个元素相乘,其中每对都嵌套在元素的父列表中。例如,我有我的预定义变量:
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):
与嵌套递归调用相结合的递归函数,但我又一次找不到解决方案。
请比我更有经验和更聪明的人帮助我;任何和所有的帮助表示赞赏!谢谢!
解决方案
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]
推荐阅读
- r - 如何从R中同一列的两个观察中获得差异
- google-tag-manager - 谷歌标签管理器替代品
- veins - 使用 Venes_inet 时的障碍文件 (poly.xml) 和 IEEE802.11p
- android - 如何在 ScrollUp 上清除 RecyclerView 中的列表
- javascript - 如何在javascript中停止页面中的所有脚本?
- bash - 如何为这个嵌套的 Bash 脚本使用超时?
- python - Openpyxl 将百分比四舍五入到小数点后 1 位
- javascript - 可变类型:为什么在 Python 和 Ruby 中具有相同内容的数组被认为是相等的,而不是 Javascript?
- python - Celery 不使用所有 eventlet 线程
- python - 两个总和索引列表超出范围