我想在python中的find()中实现OR运算符

时间:2013-02-21 12:40:52

标签: python operator-keyword

在编译以下代码时,我没有收到语法错误,但没有得到所有结果。程序的要点是检查一个字符串序列,在其中找到一些特定的子字符串,并打印一个结果字符串,其中包含子字符串和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。任何人都可以帮我实现操作符???

6 个答案:

答案 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 assertionscapturing group的正则表达式重叠匹配:

>>> import re
>>> regex = re.compile("(?=(AA[TCG].{19}))")
>>> regex.findall("ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT")
['AATCTTGTGATTGCATTGACAC', 'AAGAACTCTTAGTGAAATATCA', 'AACTCTTAGTGAAATATCAGTA']
>>>

答案 5 :(得分:-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