1

我想做n次嵌套循环,这个n是一个变量,可以由函数或输入法提供。为了做到这一点,我必须写很多 if..elif 块取决于 n 的大小,有没有人有好的策略来处理这个任务?我使用的代码(4个字母组合问题)如下:

def charCombination(n):
   patList = []
   s = 'ATCG'
   if n == 1:
       for i in s:
           patList.append(i)
   elif n == 2:
       for i in s:
           for j in s:
               patList.append(i+j)
   elif n == 3:
       for i in s:
           for j in s:
               for k in s:
                   patList.append(i+j+k)
   ...

   return patList
4

1 回答 1

5

您可以使用带有参数的itertools.productrepeat

import itertools

def charCombination(n):
    return ["".join(item) for item in itertools.product("ATCG", repeat=n)]

print charCombination(1)
print charCombination(2)
print charCombination(3)

输出

['A', 'T', 'C', 'G']
['AA', 'AT', 'AC', 'AG', 'TA', 'TT', 'TC', 'TG', 'CA', 'CT', 'CC', 'CG', 'GA', 'GT', 'GC', 'GG']
['AAA', 'AAT', 'AAC', 'AAG', 'ATA', 'ATT', 'ATC', 'ATG', 'ACA', 'ACT', 'ACC', 'ACG', 'AGA', 'AGT', 'AGC', 'AGG', 'TAA', 'TAT', 'TAC', 'TAG', 'TTA', 'TTT', 'TTC', 'TTG', 'TCA', 'TCT', 'TCC', 'TCG', 'TGA', 'TGT', 'TGC', 'TGG', 'CAA', 'CAT', 'CAC', 'CAG', 'CTA', 'CTT', 'CTC', 'CTG', 'CCA', 'CCT', 'CCC', 'CCG', 'CGA', 'CGT', 'CGC', 'CGG', 'GAA', 'GAT', 'GAC', 'GAG', 'GTA', 'GTT', 'GTC', 'GTG', 'GCA', 'GCT', 'GCC', 'GCG', 'GGA', 'GGT', 'GGC', 'GGG']
于 2013-11-12T01:54:56.213 回答