优化大量组合的算法(Python)

问题描述 投票:0回答:1

我正在尝试确定如何生成然后循环遍历大量列表列表的组合,以查看遵循特定标准的“最佳”组合。

我有 6 个列表列表,其中每个子列表的长度都是可变的,但在该特定列表中长度相同。这些列表的示例:

A = [[1,2,3],[4,5,6],[7,8,9]]
B = [[11,12],[13,14],[15,16],[7,18]]
C = [[10],[20],[30],[40],[50],[60],[70]]

等等。

我可以使用 itertools.product() 和 itertools.chain() 创建主列表

D = [1,2,3,11,12,10],[1,2,3,11,12,20],...[7,8,9,7,18,70]]

然后,我将循环 D 并使用每个子列表中的值作为索引来调用某个主数组中的值并执行计算,目的是确定 D 中的哪个子列表给出最高值。

编辑:不认为相关,但计算是我从 D 中的子列表中获取我正在查看的每个组合,并使用这 2 个值作为主 2x2 数组的索引,该数组提取一个数字,然后在所有组合中取平均值给定的子列表。

我面临的问题是我的一些初始列表的长度约为 10k,创建所有可能的组合最终需要非常大的计算量。

是否有更好的方法来解决问题或循环遍历这么多组合?

python combinations permutation
1个回答
0
投票

您处于使用

product
中的
chain
itertools
的正确路径上。它们返回一个 Python 生成器,根据需要返回结果的每个元素,因此可以节省内存。您可以将主数组定义为
D = map(lambda e: chain(*e), product(A, B, C))
(不要将其转换为列表,因为它将在内存中存储所有组合),并迭代 D

© www.soinside.com 2019 - 2024. All rights reserved.