【发布时间】:2017-02-17 02:10:42
【问题描述】:
我有一些排序/评分的参数列表。我想生成可能的参数组合(笛卡尔积)。但是,如果参数的数量很大,这个很快(很快!!)就会变成一个很大的数字。基本上,我想做一个笛卡尔积,但要尽早停止。
import itertools
parameter_options = ['1234',
'123',
'1234']
for parameter_set in itertools.product(*parameter_options):
print ''.join(parameter_set)
生成:
111
112
113
114
121
122
123
124
131
132
133
134
...
我想生成(或类似的东西):
111
112
121
211
122
212
221
222
...
因此,如果我提前停止,我至少会得到几组“好”的参数,其中一组好的参数大多来自列表的早期。这个特定的顺序很好,但我对任何改变“下一个排列”选择顺序的技术感兴趣。我希望生成的早期结果中的大多数项目都位于列表的前面,但并不真正关心解决方案是先生成 113 还是 122,还是先生成 211 或 112。
我的计划是在生成一些排列后停止(可能是 10K 左右?取决于结果)。因此,如果少于截止值,则最终都应该生成。并且最好每个只生成一次。
【问题讨论】:
-
你到底想要什么?那个特定的顺序,还是其他顺序?
-
那个特定的顺序会很好,但我对任何改变“下一个排列”选择顺序的技术感兴趣。我希望生成的早期结果具有列表前面的大多数项目,但并不真正关心解决方案是先生成 113 还是 122,还是先生成 211 或 112。
-
你最终做了什么?
标签: python algorithm itertools