Python 如何:在一长串字符串列表中从一个字符串到另一个字符串
想象一长串字符: “aattaattctatattgaaattggccccaattccaaatc…” 我定义了4个字符串:Python 如何:在一长串字符串列表中从一个字符串到另一个字符串,python,string,list,Python,String,List,想象一长串字符: “aattaattctatattgaaattggccccaattccaaatc…” 我定义了4个字符串: "AAT" "ATG" "TTT" "ATC" 我的任务是为长字符串中的每个字符串“AAT”找到“端点”。我的终点是最后三个字符串“ATG”、“TTT”、“ATC”,这意味着我需要找到从起始位置“AAT”到结束位置的索引,可以是“ATG”、“TTT”或“ATC”。我被告知要按第三步前进,但我不知道怎么做 我尝试过这样做: open1=open(<text>)
"AAT"
"ATG"
"TTT"
"ATC"
我的任务是为长字符串中的每个字符串“AAT”找到“端点”。我的终点是最后三个字符串“ATG”、“TTT”、“ATC”,这意味着我需要找到从起始位置“AAT”到结束位置的索引,可以是“ATG”、“TTT”或“ATC”。我被告知要按第三步前进,但我不知道怎么做
我尝试过这样做:
open1=open(<text>)
u=open1.read()
string1="AAT
while True:
p=u.find(string1,p)
p=p+1
mylist.append(p)
print mylist
open1=open()
u=open1.read()
string1=“AAT
尽管如此:
p=u.find(string1,p)
p=p+1
mylist.append(p)
打印mylist
,它将在我的文本文件中打印字符串“ATG”的位置。我不知道如何从这里继续。我想我也可以找到其他字符串的位置,但如何创建一个从“ATG”开始并停止直到满足其中一个端点的函数
希望这是可以理解的您可以使用正则表达式:
>>> import re
>>> s = "AATTAATCTATATATTGAAATGGGGCCCCAATTTTCCCAAATC ...."
>>> [(m.start(), m.end()) for m in re.finditer('AAT.*?(?:ATG|TTT|ATC)', s)]
[(0, 8), (18, 34)]
re.finditer搜索正则表达式的多个非重叠匹配项,并为每个匹配项返回一个MatchObject。match对象的start()和end()方法给出匹配字符串的开始和结束索引
正则表达式搜索AAT,然后搜索ATG、TTT或ATC第一次出现之前的任何内容
如果在程序运行之前不知道开始和结束字符串,则可能需要动态构造正则表达式-这非常简单:
start = "AAT"
end = ["ATG", "TTT", "ATC"]
regex = "%s.*?(?:%s)" % (start, '|'.join(end))
可以使用正则表达式执行此操作:
>>> import re
>>> s = "AATTAATCTATATATTGAAATGGGGCCCCAATTTTCCCAAATC ...."
>>> [(m.start(), m.end()) for m in re.finditer('AAT.*?(?:ATG|TTT|ATC)', s)]
[(0, 8), (18, 34)]
re.finditer搜索正则表达式的多个非重叠匹配项,并为每个匹配项返回一个MatchObject。match对象的start()和end()方法给出匹配字符串的开始和结束索引
正则表达式搜索AAT,然后搜索ATG、TTT或ATC第一次出现之前的任何内容
如果在程序运行之前不知道开始和结束字符串,则可能需要动态构造正则表达式-这非常简单:
start = "AAT"
end = ["ATG", "TTT", "ATC"]
regex = "%s.*?(?:%s)" % (start, '|'.join(end))
哦,我忘了。这是python 2.7。哦,我忘了。这是python 2.7。