list - 查找序列中子序列的位置
问题描述
l1 = "GATATATGCATATACTT"
l2 = "ATAT"
for i in range(len(l1)):
if l1[i] == "A" and l1[i+1] == "T" and l1[i+2] == "A" and l1[i+3] == "T":
print (i+1)
L1 是主序列 L2 是我试图在 L1 中找到的子序列。上面的代码确实给了我正确的输出(2,4,10)但是有更好的方法吗?我是编码新手,我想如果我有一个更大的序列,这可能效率不高。谢谢!
解决方案
您可以使用re
模块。但首先将l2
字符串转换为正则表达式:
A(?=TAT)
然后你可以使用re.finditer
:
import re
l1 = "GATATATGCATATACTT"
l2 = "ATAT"
search_string = "{}(?={})".format(l2[0], l2[1:])
out = [m.start() + 1 for m in re.finditer(search_string, l1)]
print(out)
印刷:
[2, 4, 10]
推荐阅读
- python - 将 Pewee 查询结果转换为列表
- mysql - 蜂巢中的等级/组
- dart - 使用 VSCode 创建和运行 Dart 控制台应用程序?
- amazon-web-services - 动态帧与数据帧
- android - 如何从 Android 应用向 Google 助理发送文本查询
- java - 我在 java 中使用 UDP Socket 编程,需要通过嘈杂的网桥发送数据
- javascript - Javascript未从动态生成的表单提交数据
- datetime - 在 SAS 中随时间跨度创建变量
- matlab - 如何将字符串转换为将传递给绘图函数的变量名
- javascript - 与 let 和 var 相比,使用 const 有什么优势?