我试图以编程的方式解决一个问题,到目前为止只能通过硬编码来解决它。
假设我们有几个连续的决策,每个决策都有2-3个可能的选择。如何为这组连续的决策生成所有可能的选项组合?
具体地说,问题看起来像这样,我们沿着一段DNA有几个插入位点,在这些插入位点上有2-3个可能的序列可以插入。使用列表理解(并指定占位符变量的数量),我能够产生所有可能的组合,代码如下。B1、B2、B3是包含可插入的可能序列的列表。
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))收益率:
[['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个插入位点,这是不可行的。我怎样才能以一种更程序化的方式做到这一点呢?
发布于 2020-10-19 09:09:36
看起来你是在索要产品
for c in itertools.product(B3,B2,B1):
print(c)发布于 2020-10-19 09:55:32
如果您想自己编写代码,可以使用一些动态编程概念,如示例中所示:
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')输出:
['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']https://stackoverflow.com/questions/64419863
复制相似问题