首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一组连续决策的所有可能的选项组合

一组连续决策的所有可能的选项组合
EN

Stack Overflow用户
提问于 2020-10-19 09:04:28
回答 2查看 32关注 0票数 1

我试图以编程的方式解决一个问题,到目前为止只能通过硬编码来解决它。

假设我们有几个连续的决策,每个决策都有2-3个可能的选择。如何为这组连续的决策生成所有可能的选项组合?

具体地说,问题看起来像这样,我们沿着一段DNA有几个插入位点,在这些插入位点上有2-3个可能的序列可以插入。使用列表理解(并指定占位符变量的数量),我能够产生所有可能的组合,代码如下。B1、B2、B3是包含可插入的可能序列的列表。

代码语言:javascript
复制
B3 = ['AAC','AGC']

B2 = ['AAA','AGA','GGA']

B1 = ['ACG','AGC']


LIST = [[a,b,c] for a in B3 for b in B2 for c in B1]
print(LIST)
print(len(LIST))

收益率:

代码语言:javascript
复制
[['AAC', 'AAA', 'ACG'], ['AAC', 'AAA', 'AGC'], ['AAC', 'AGA', 'ACG'], ['AAC', 'AGA', 'AGC'], ['AAC', 'GGA', 'ACG'], ['AAC', 'GGA', 'AGC'], ['AGC', 'AAA', 'ACG'], ['AGC', 'AAA', 'AGC'], ['AGC', 'AGA', 'ACG'], ['AGC', 'AGA', 'AGC'], ['AGC', 'GGA', 'ACG'], ['AGC', 'GGA', 'AGC']]
12

然而,这依赖于我硬编码我将需要多少个插入位点。如果我们在一个DNA片段上有15个插入位点,这是不可行的。我怎样才能以一种更程序化的方式做到这一点呢?

EN

回答 2

Stack Overflow用户

发布于 2020-10-19 09:09:36

看起来你是在索要产品

代码语言:javascript
复制
for c in itertools.product(B3,B2,B1):
    print(c)
票数 2
EN

Stack Overflow用户

发布于 2020-10-19 09:55:32

如果您想自己编写代码,可以使用一些动态编程概念,如示例中所示:

代码语言:javascript
复制
B1 = ['ACG','AGC']
B2 = ['AAA','AGA','GGA']
B3 = ['AAC','AGC']
B4 = ['XX', 'YYY']

def dynamic_program(*args) :
    all_combinations = []

    def generate_combinations(*args, combination=[]):
        if len(args) == 0 :
            all_combinations.append(combination)
            return

        B_i = args[0]
        for b_i in B_i:
            generate_combinations(*args[1:], combination=combination+[b_i])
        
    generate_combinations(*args)
    return all_combinations

print(*dynamic_program(B1, B2, B3, B4), sep='\n')

输出:

代码语言:javascript
复制
['ACG', 'AAA', 'AAC', 'XX']
['ACG', 'AAA', 'AAC', 'YYY']
['ACG', 'AAA', 'AGC', 'XX']
['ACG', 'AAA', 'AGC', 'YYY']
['ACG', 'AGA', 'AAC', 'XX']
['ACG', 'AGA', 'AAC', 'YYY']
['ACG', 'AGA', 'AGC', 'XX']
['ACG', 'AGA', 'AGC', 'YYY']
['ACG', 'GGA', 'AAC', 'XX']
['ACG', 'GGA', 'AAC', 'YYY']
['ACG', 'GGA', 'AGC', 'XX']
['ACG', 'GGA', 'AGC', 'YYY']
['AGC', 'AAA', 'AAC', 'XX']
['AGC', 'AAA', 'AAC', 'YYY']
['AGC', 'AAA', 'AGC', 'XX']
['AGC', 'AAA', 'AGC', 'YYY']
['AGC', 'AGA', 'AAC', 'XX']
['AGC', 'AGA', 'AAC', 'YYY']
['AGC', 'AGA', 'AGC', 'XX']
['AGC', 'AGA', 'AGC', 'YYY']
['AGC', 'GGA', 'AAC', 'XX']
['AGC', 'GGA', 'AAC', 'YYY']
['AGC', 'GGA', 'AGC', 'XX']
['AGC', 'GGA', 'AGC', 'YYY']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64419863

复制
相关文章

相似问题

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