【发布时间】:2018-07-04 02:14:09
【问题描述】:
假设我有一个由 5 个整数组成的行向量,其中第一个整数是 int1,第二个是 int2
int1 int2 int3 int4 int5
我想创建一个所有可能组合的列表,假设每个整数都可以在 1 到 99 之间。
一种可能性是编写 5 个嵌套循环:
my list = []
for i in range(1,99):
for j in range(1,99):
for k in range(1,99):
for l in range(1,99):
for m in range(1,99):
my_list.append([[m,l,k,j,i]])
这将非常低效,我们需要 9,509,900,499 次迭代。
有没有更有效的方法将所有可能的组合添加到列表中(即替代 5 个嵌套循环)?
我将用 python 编写代码,但响应不必是特定于 python 的。
【问题讨论】:
-
如果有 9,509,900,499 种组合,那么您需要将 9,509,900,499 项添加到列表中。
-
嵌套循环不会使其变慢。嵌套循环被认为是“慢”的,因为迭代的总数很快就会变大。但是您需要执行特定数量的迭代。您可以写出 9,509,900,499 条单独的
append语句,但速度不会明显提高(忽略加载如此大的程序引起的问题!)。 -
虽然注意有更简单的方法来编写程序:见docs.python.org/3/library/itertools.html
-
99% 的情况下,此类问题属于 XY 问题。我建议你试着让我们相信你是剩下的 1%。
标签: python iteration combinatorics