首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中生成列表的排列列表

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

Stack Overflow用户
提问于 2014-06-26 18:38:44
回答 1查看 157关注 0票数 0

我在列表中有以下数据。这是一个核反应堆的燃料束(半对称),每一个数代表一个燃料引脚(具有不同的浓缩)。数量越多,燃料就越多。我正在尝试生成大量要运行的输入文件(我已经有了将数组输入到输入文件并运行它的函数)。--这只是一个数组看起来像的示例

代码语言:javascript
复制
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经验仅值两周。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-26 18:56:26

如果我理解您的话,那么使用itertools模块中的工具就比较简单了。有点像

代码语言:javascript
复制
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

将反复讨论所有的可能性:

代码语言:javascript
复制
>>> 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]]

不过,请注意,通过所有的可能性,这种方式很可能是完全不可行的,因为数量的可能性将增长很快。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24437820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档