在编译以下代码时,我没有收到语法错误,但没有得到所有结果。程序的要点是检查一个字符串序列,在其中找到一些特定的子字符串,并打印一个结果字符串,其中包含子字符串和19个字符。每次出现这些字符串时打印以及每个结果字符串。
这是代码..
x=raw_input('GET STRING:: ');
m=len(x);
k=0;
while(k<m):
if('AAT'in x or 'AAC' in x or 'AAG' in x):
start = x.find('AAT') or x.find('AAC') or x.find('AAG')
end=start+19
print x[start:end]
当我输入像ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT这样的字符串时。它仅搜索AAT并打印生成的子字符串,但不打印AAG和AAC。任何人都可以帮我实现操作符???
答案 0 :(得分:2)
在您的示例中,使用正则表达式可能更好。
>>> text = 'ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT'
>>> re.search('(?:AA[TCG])(.{19})', text).group(1)
'CTTGTGATTGCATTGACAC'
如果需要多个匹配项,您可以更改为re.findall
。 (但是如果你想要重叠匹配(即,你的3个字符串再次出现在19中),这将无法正常工作。
答案 1 :(得分:1)
从k
开始搜索第一个匹配项mystring=raw_input('GET STRING:: ')
m=len(mystring)
k=0
while(k<m):
x=mystring[k:]
start=min(x.find('AAT'),x.find('AAC'),x.find('AAG'))
end=min(start+19,m)
print x[start:end]
k+=start+1
答案 2 :(得分:0)
您应该将start
设置为三个find
语句的最小非负值。
答案 3 :(得分:0)
这个怎么样:
import re
str= "ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT"
alist = ['AAT','AAC','AAG']
newlist= [re.findall(e,str) for e in alist]
Output: [['AAT','AAT'],['AAC'],['AAG']].
这里的索引比较重一些:
import re
astr= "ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT"
def find_triple_base(astr, nth_sub):
return [(m.end(), m.group(), astr[m.end(0):m.end(0)+nth_sub]) for m in re.finditer(r'AA[TCG]', astr)]
for e in find_triple_base(astr, 19): print(e)
Output:
(7, 'AAT', 'CTTGTGATTGCATTGACAC')
(43, 'AAG', 'AACTCTTAGTGAAATATCA')
(46, 'AAC', 'TCTTAGTGAAATATCAGTA')
(58, 'AAT', 'ATCAGTATATCT')
它的作用:findall找到您想要查找的所有基本三元组(alist)的出现,并生成一个包含3个基本三元组列表的新列表,例如[['AAT','AAT'],['AAC '],[' AAG']]。打印出来是直截了当的。
我希望这有帮助!
答案 4 :(得分:0)
您可以处理与使用lookahead assertions和capturing group的正则表达式重叠匹配:
>>> import re
>>> regex = re.compile("(?=(AA[TCG].{19}))")
>>> regex.findall("ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT")
['AATCTTGTGATTGCATTGACAC', 'AAGAACTCTTAGTGAAATATCA', 'AACTCTTAGTGAAATATCAGTA']
>>>
答案 5 :(得分:-1)
代码:
x=raw_input('GET STRING:: ');
m=len(x);
k=0
if('AAT'in x ):
start = x.find('AAT')
end=start+19
print x[start:end]
elif('AAC' in x ):
start = x.find('AAC')
end=start+19
print x[start:end]
elif('AAG' in x):
start = x.find('AAG')
end=start+19
print x[start:end]
编辑:试试这个正则表达式代码
import re
y=r"(?:AA[TCG]).{19}"
x=raw_input('GET STRING:: ');
l= re.findall(y,x)
for x in l:
print x
print len(x)