考虑这样的配置文件:
A = <some value>
B = <some value>
C = <some value>
其中每个选项A / B / C可以占用属于列表L的任何值X.此列表L的大小是固定的并且是预先知道的。请注意,配置文件中可以有任意数量的条目 - 即可以有D,E,F ......等等。
因此,作为一个例子,
A = <any value from list {1,2,3,4}>
B = <any value from list {5, 10, 15}>
C = <any value from list {10,20,30,40,50}>
什么算法可以生成配置文件的每个排列(不重复)?
这意味着创建所有可能的配置文件,如 -
A=1
B=5
C=10
A=1
B=5
C=20
A=1
B=5
C=30
.
.
.
And so on
我知道这可能不完全符合“编程问题”而非“算法问题”,但我已经看到Project Euler的问题,并且在这里被问及(并且很好)。如果这出现在主题之外,我仍然会道歉。
答案 0 :(得分:1)
这应该有效。您应该阅读标准的lib itertools
模块:https://docs.python.org/2/library/itertools.html#itertools.product
import itertools
l1 = [1,2,3,4]
l2 = [5,10,15]
l3 = [10, 20, 30, 40, 50]
for a, b, c in itertools.product(l1, l2, l3):
print a,b,c
由于itertools.product
的方法签名是:(*iterables[,repeat])
只需执行以下操作即可轻松处理可变数量的列表:
lists = get_my_lists() # whatever
itertools.product(*lists)
答案 1 :(得分:1)
或手工:
[(x,y,z) for x in l1 for y in l2 for z in l3] ...