首页 > 解决方案 > 生成未知数量变量的所有组合

问题描述

我有一个变量列表,其中的数量可以改变。每个变量都有一个下限、上限和一个增量值。例如:

variables = {
   "a": [1, 10, 1],
   "b": [50, 200, 5],
   "c": [50, 300, 10]
}

其中对于键“a”,1 是下限,10 是上限,1 是增量。

"a" would go from 1 through 10, incrementing by 1
"b" would go from 50 through 200, incrementing by 5
"c" would go from 50 through 300, incrementing by 10
... there can be more or less such keys.

我需要创建一个包含 a、b 和 c 的所有可能组合的列表,而不需要硬编码嵌套循环,因为变量/键的数量未知,而且我无法理解它。我正在使用 Python 3.7

理想情况下,输出将是每个变量的组合表,可能是逗号分隔的值。例如。

a  b  c
x  y  z
x  y  z
x  y  z
x  y  z

但是,任何事情都可以,只要我可以将输出整理成可以将每个组合作为一组访问的格式。例如元组列表。

[
  (x, y, z)
  (x, y, z)
]
...

标签: pythonloopsdynamiccombinations

解决方案


在这里,假设:

variables = {
   "a": [1, 10, 1],
   "b": [50, 200, 5],
   "c": [50, 300, 10]
}

然后您可以使用以下方法创建迭代器itertools

from itertools import product, starmap
cartesian_product = product(*starmap(range, variables.values()))

或者,只是为了向您展示星图在做什么:

cartesian_product = product(*(range(*v) for v in variables.values()))

推荐阅读