我在列表中有以下数据。这是一个核反应堆的燃料束(半对称),每一个数代表一个燃料引脚(具有不同的浓缩)。数量越多,燃料就越多。我正在尝试生成大量要运行的输入文件(我已经有了将数组输入到输入文件并运行它的函数)。--这只是一个数组看起来像的示例
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经验仅值两周。
发布于 2014-06-26 18:56:26
如果我理解您的话,那么使用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]]不过,请注意,通过所有的可能性,这种方式很可能是完全不可行的,因为数量的可能性将增长很快。
https://stackoverflow.com/questions/24437820
复制相似问题