用于计算包含一些项的列表集的总唯一排列的算法

时间:2014-08-03 13:34:14

标签: python c++ algorithm

考虑这样的配置文件:

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的问题,并且在这里被问及(并且很好)。如果这出现在主题之外,我仍然会道歉。

2 个答案:

答案 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] ...