gpt4 book ai didi

python - 寻找优雅的 glob-like DNA 字符串扩展

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:14 25 4
gpt4 key购买 nike

我正在尝试对一组具有多个可能碱基的 DNA 串进行球状扩展。

我的 DNA 字符串的基数包含字母 A、C、G 和 T。但是,我可以有特殊字符,例如 M,它可以是 A 或 C。

例如,假设我有字符串:

自动取款机

我想将这个字符串作为输入并输出四个可能匹配的字符串:

ATAAATACATCAATCC

我觉得必须有一些优雅的 Python/Perl/Regular Expression 技巧才能做到这一点,而不是暴力破解解决方案。

感谢您的任何建议。

编辑,感谢 cortex 的产品运营商。这是我的解决方案:

仍然是 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

最佳答案

同意其他发帖人的观点,想做这件事似乎很奇怪。当然,如果您真的想要,在 Python (2.6+) 中(一如既往)有一种优雅的方法:

from itertools import product
map("".join, product(*[['A', 'C'] if x == "M" else [x] for x in "GMTTMCA"]))

具有输入处理的完整解决方案:

import sys
from itertools import product

base_globs = {"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 base_glob(glob_sequence):
production_sequence = [base_globs.get(base, [base]) for base in glob_sequence]
return map("".join, product(*production_sequence))

for line in sys.stdin.readlines():
productions = base_glob(line.strip())
print "\n".join(productions)

关于python - 寻找优雅的 glob-like DNA 字符串扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1098461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com