Python 在较长字符串中查找多个不同字符串的首次出现
我目前正在做一个研究项目,我将制作一个python程序,在这个程序中我可以输入DNA序列,从中获取所有可能的阅读框,然后找到任何打开的阅读框。 我不能使用Biopython,因为我们自己要做这件事 从我编写的代码中,我将获得以下样式的输出:Python 在较长字符串中查找多个不同字符串的首次出现,python,Python,我目前正在做一个研究项目,我将制作一个python程序,在这个程序中我可以输入DNA序列,从中获取所有可能的阅读框,然后找到任何打开的阅读框。 我不能使用Biopython,因为我们自己要做这件事 从我编写的代码中,我将获得以下样式的输出: [“TGC”、“ATG”、“ATA”、“TGG”、“AGG”、“AGG”、“CCG”、“TAA”、“TAG”、“TGA”] 我现在要做的是将起始密码子定义为“ATG”,并获取其索引,同时将终止密码子定义为[“TAA”,“TAG”,“TGA”],如果找到这三个
[“TGC”、“ATG”、“ATA”、“TGG”、“AGG”、“AGG”、“CCG”、“TAA”、“TAG”、“TGA”]
我现在要做的是将起始密码子定义为“ATG”,并获取其索引,同时将终止密码子定义为[“TAA”,“TAG”,“TGA”]
,如果找到这三个密码子中的任何一个,则报告第一个找到的密码子的索引,并忽略其余的。如果没有找到终止密码子,则返回一些字符串
除此之外,我希望能够比较上述风格中最多6种不同输入的“长度”,并选择最长的一种
这是我第一次在这里发帖,如果问题的措辞不恰当,我会向你致意,谢谢你的帮助!长字符串
我不完全确定这是否是您想要的,但要在较长的字符串中找到第一个出现的字符串,您可以这样做,例如
s = "This is a long string. This is the second sentence."
short_strings = ["his", "is", "sec", "dummy"]
first_occurrence = [s.find(short) for short in short_strings]
print(first_occurrence)
这将产生输出
[1, 2, 35, -1]
{'ATG': 1, 'TAA': 5}
请注意,对于不匹配的内容,您会得到-1
字符串列表中的字符串
如果要为另一个列表中的每个元素查找列表中的第一个匹配项,可以执行以下操作
a_list = ["ACA", "ATG", "CGC", "ATA", "TAT", "TAA", "TAG", "TGA", "ATG"]
b_list = ["ATG", "TAA", "AAA"]
x = {
b : next(a_index for a_index, a in enumerate(a_list) if a == b)
for b in b_list
if b in a_list
}
print(x)
哪一个产生输出
[1, 2, 35, -1]
{'ATG': 1, 'TAA': 5}
可供替代的
如果您想要一个通过列表a_list
的次数更少的解决方案,您可以更多地依赖列表生成器,如下面的示例所示
gen = ((a_index, a) for a_index, a in enumerate(a_list) if a in b_list)
for elem in gen:
b_list.remove(elem[1])
print(elem)
这将在找到匹配项时报告匹配项,而不关心它首先在
b_列表中找到哪个元素。您可以将print语句修改为您想要的任何功能,但必须保留remove
语句,否则生成器将找到多个匹配项。这是否可以适应在中搜索列表?假设我有一个如下的列表[“ACA”、“ATG”、“CGC”、“ATA”、“TAT”、“TAA”、“TAG”、“TGA”],我想找到“ATG”的索引以及“TAA”、“TAG”或“TGA”的首次出现。这种方法的缺点(是否适用于列表)它会在整个列表中搜索一次每个可能的停止点-即使下一个项目是您的停止条件之一,也应该可以,我只需要知道第一个停止点。之后的任何内容都不会被使用。好的,我不知道这是否是您想要的,但我编辑了答案,以包含一个关于如何处理列表的示例。@H恩里卡尔森帮了忙吗?