N
|
T
有没有办法在下面的输入中找到上面的模式?它是一种跨越多行文本的垂直图案。
5' TCAGATGTGTATAAGAGACAGTGCGTATTCTCAGTCAGTTGAAGTGNTACAGAA
:: ::: :: : : : ||||| :
3' ATTCAGCCTGCACTCGTTACCGAGGCATGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG
我尝试了多种方法,但不确定是否可行。这不起作用:
if 'N\n|\nT' in input:
print('found')
此外,如果 T
可以是任何字母 A
、T
、C
或 G
?
最佳答案
将字符串(我猜是 DNA 序列和碱基配对模式)拆分为 3 个字符串的列表,并使用索引迭代所有 3 个字符串:
import re
in_str = '''
5' TCAGATGTGTATAAGAGACAGTGCGTATTCTCAGTCAGTTGAAGTGNTACAGAA
:: ::: :: : : : ||||| :
3' ATTCAGCCTGCACTCGTTACCGAGGCATGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG'''
in_str = re.sub(r'^\s*', "", in_str)
lst = re.split(r'\n', in_str)
acgt = set(['A', 'C', 'G', 'T'])
for idx in range(min([len(s) for s in lst])):
if lst[0][idx] == 'N' and lst[1][idx] == '|' and lst[2][idx] in acgt:
print('found!')
break
要查找该模式是否出现在第一条链的最后 10 个核苷酸内,请在相应的范围内迭代:
len0 = len(lst[0])
offset = 10
for idx in range(len0 - offset, len0):
if lst[0][idx] == 'N' and lst[1][idx] == '|' and lst[2][idx] in acgt:
print('found!')
break
关于python - 如何找到跨越垂直线的图案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67063335/