如何在python中生成列表的排列列表

时间:2014-06-26 18:38:44

标签: python list loops

我在列表列表中有以下数据。这是用于核反应堆的燃料束(具有半对称性),并且每个数字代表燃料销(具有不同的富集)。数字越高,燃料越多。我正在尝试生成大量的输入文件来运行(我已经有了将我的数组输入到我的输入文件并运行它的函数)。 这只是一个数组的样本

20 
30 60
50 80 80 
60 80 80 80 
60 81 80 80 80 
60 80 80 00 00 80 
60 80 80 00 00 80 80 
50 80 80 80 80 80 80 80 
40 70 80 81 80 80 80 80 80
20 40 60 70 80 80 70 71 50 30

所以我将使用规则来制作列表。像边缘上的针脚必须是低浓度的,不能被10整除的针脚不能在边缘或彼此相邻的面上,或者面对00.由于每个点有90个选项,我需要限制总的可能性。这就是为什么我想为数组中的每个位置生成一个选项列表,然后生成每个可能的数组。我理解如何实现我的所有规则,我只是对构建所有可能的数组组合感到困惑。

我如何为我的阵列生成所有可能的组合?或者,如果有更好的方法来完成我想要做的事情。我的Python体验只有两周左右。

1 个答案:

答案 0 :(得分:2)

如果我了解你,使用itertools模块中的工具相对简单。像

这样的东西
from itertools import product, chain

def choose_from_2d_lol(lol):
    flattened_options = list(chain.from_iterable(lol))
    for p in product(*flattened_options):
        p_iter = iter(p)
        new_list = [[next(p_iter) for elem in row] for row in lol]
        yield new_list

会迭代所有可能性:

>>> xx = [[[10,20,30]],[[44], [55,66]]]
>>> for chosen in choose_from_2d_lol(xx):
...     print(chosen)
...     
[[10], [44, 55]]
[[10], [44, 66]]
[[20], [44, 55]]
[[20], [44, 66]]
[[30], [44, 55]]
[[30], [44, 66]]

但请注意,随着可能性的增长非常迅速,以这种方式通过各种可能性很可能是完全不可行的。