我有1200个序列
>3fm8|A|A0JLQ2
CFLVNLNADPALNELLVYYLKEHTLIGSANSQDIQLCGMGILPEHCIIDITSEGQVMLTP
QKNTRTFVNGSSVSSPIQLHHGDRILWGNNHFFRLNLP
>2ht9|A|A0JLT0
LATAPVNQIQETISDNCVVIFSKTSCSYCTMAKKLFHDMNVNYKVVELDLLEYGNQFQDA
LYKMTGERTVPRIFVNGTFIGGATDTHRLHKEGKLLPLVHQCYL
我想读每个可能的模式,中间有半胱氨酸,开头有五个字符串,后面还有其他五个字符串,比如xxxxx cxxxxx
输出应如下所示:
这是图中只给出C的位置。这不是我想要的工作
pos=[]
def find(ch,string1):
for i in range(len(string1)):
if ch == string1[i]:
pos.append(i)
return pos
z=find('C','AWERQRTCWERTYCTAAAACTTCTTT')
print z
我的解决方案基于regex,并显示了使用regex和while循环的所有可能的解决方案。感谢@Smac89通过将其转化为发电机对其进行改进:
您需要在循环之外返回,因为您将在第一个匹配中返回,所以您的列表中只有一个字符:
也可以使用enumerate和list comp来代替范围逻辑:
列表comp中的每个
index
是字符索引,每个char
是实际字符,因此我们保留char等于ch的每个索引如果你想要两面的五个字符:
我添加了检查索引的功能,因为如果索引是<;5并且从末尾开始是相同的,那么显然我们无法在
C
之前获得5个字符。你知道吗您可以在单个函数中完成这一切,在找到匹配项时生成一个切片:
假设问题中的数据实际上是yoru文件中的两行:
跑步:
将输出:
它给出了六个匹配项,而不是你预期的四个匹配项,所以我猜你没有包括所有可能的匹配项。你知道吗
您还可以使用^{} 加速代码,从最后一个匹配索引+1开始进行后续的每个匹配
这将产生相同的输出。当然,如果字符串不能重叠,您可以开始寻找下一个匹配的字符串更进一步每次。你知道吗
相关问题 更多 >
编程相关推荐