Skip to main content
 首页 » 编程设计

python之从给定列表生成所有可能的 k-mers(字符串组合)

2025年05月04日37yxwkf

我有一个由 20 个字符组成的字符串 S:

S='ARNDCEQGHILKMFPSTWYV' 

我需要根据给定的输入 k 生成所有可能的 k-mer 组合。

当 k == 3 时,有 8000 种组合(20*20*20),输出列表如下所示:

output = ['AAA', 'AAR', ..., 'AVV', ..., 'VVV'] #len(output)=8000 

当 k == 2 时,有 400 种组合 (20*20),输出列表如下所示:

output = ['AA', 'AR', 'AN', ..., 'VV'] #len(output)=400 

当k == 1时,则只有20种组合:

output =['A', 'R', 'N', ..., 'Y', 'V'] #len(output)=20 

我知道如果数字 k 是固定的,比如如果 k == 3,那么我可以这样做:

for a in S: 
   for b in S: 
      for c in S: 
         output.append(a+b+c) 
#then len(output)=8000 

但是数字 k 是随机选择的。 我尝试使用排列,但它没有给我包含重复字母的字符串,例如 'AAA',但也许可以,但我只是做错了。

请您参考如下方法:

您要找的是itertools.product() .您可以使用 repeat 参数作为算法中 k 的数量。

from itertools import product 
... 
list(product('ARNDCEQGHILKMFPSTWYV', repeat=2)) # len = 400 
list(product('ARNDCEQGHILKMFPSTWYV', repeat=3)) # len = 8000 

请记住,它默认返回字符元组,如果你想要字符串,你可以使用列表推导式加入,如下所示:

[''.join(c) for c in product('ARNDCEQGHILKMFPSTWYV', repeat=3)] 
# ['AAA', 'AAR', ..., 'AVV', ..., 'VVV']