我试图做一个具有多个可能基地的DNA字符串集glob-like扩展。寻找优雅的glob-like DNA字符串扩展
我的DNA串的基础包含字母A,C,G,和T.然而,我可以有特殊字符,如中号,其可以是A或C.
例如,说我有字符串:
ATMM
我想借这个字符串作为输入和输出的四种可能的匹配字符串:
ATAA
ATAC
ATCA
ATCC
而不是蛮力的解决方案,我觉得一定是有优雅的Python/Perl的/正则表达式把戏做到这一点。
谢谢你的任何建议。
编辑,感谢皮质的产品运营商。这是我的解决方案:
还有一个Python新手,所以我打赌有更好的方式来处理比其他for循环每个字典的关键。任何建议都会很棒。
import sys
from itertools import product
baseDict = dict(M=['A','C'],R=['A','G'],W=['A','T'],S=['C','G'],
Y=['C','T'],K=['G','T'],V=['A','C','G'],
H=['A','C','T'],D=['A','G','T'],B=['C','G','T'])
def glob(str):
strings = [str]
## this loop visits very possible base in the dictionary
## probably a cleaner way to do it
for base in baseDict:
oldstrings = strings
strings = []
for string in oldstrings:
strings += map("".join,product(*[baseDict[base] if x == base
else [x] for x in string]))
return strings
for line in sys.stdin.readlines():
line = line.rstrip('\n')
permutations = glob(line)
for x in permutations:
print x
我在想根据你的扩展来说,glob会扩展字符集的匹配。但是,你是对的,它更像是一种排列组合。 – Rich 2009-07-08 17:52:26