2

编译以下代码时,我没有收到语法错误,但不是所有结果。该程序的重​​点是检查一个字符串序列,在其中找到一些特定的子字符串并打印一个结果字符串,该字符串包含子字符串和后面的 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]

当我输入像 ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATACTT 这样的字符串时。它只搜索 AAT 并打印结果子字符串,而不是 AAG 和 AAC。谁能帮我实现运营商???

4

6 回答 6

2

在您的示例中,使用正则表达式可能会更好。

>>> text = 'ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT'
>>> re.search('(?:AA[TCG])(.{19})', text).group(1)
'CTTGTGATTGCATTGACAC'

re.findall如果字符串需要多个匹配项,您可以更改为。(但是,如果您想要重叠匹配(即,您的字符串 3 再次出现在 19 中),这将不会很好地工作。

于 2013-02-21T12:53:43.000 回答
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
于 2013-02-21T12:53:34.133 回答
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']]。打印出来很简单。

我希望这有帮助!

于 2013-02-21T13:35:17.980 回答
0

您应该设置为三个语句start的最小非负值。find

于 2013-02-21T12:44:19.257 回答
0

您可以使用将前瞻断言捕获组一起使用的正则表达式来处理重叠匹配:

>>> import re
>>> regex = re.compile("(?=(AA[TCG].{19}))")
>>> regex.findall("ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT")
['AATCTTGTGATTGCATTGACAC', 'AAGAACTCTTAGTGAAATATCA', 'AACTCTTAGTGAAATATCAGTA']
>>>
于 2013-02-21T14:19:04.170 回答
-1

看看这个:http: //ideone.com/U70n4y

代码:

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)

http://ideone.com/U70n4y

于 2013-02-21T12:56:57.877 回答