Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在较长字符串中查找多个不同字符串的首次出现_Python - Fatal编程技术网

Python 在较长字符串中查找多个不同字符串的首次出现

Python 在较长字符串中查找多个不同字符串的首次出现,python,Python,我目前正在做一个研究项目,我将制作一个python程序,在这个程序中我可以输入DNA序列,从中获取所有可能的阅读框,然后找到任何打开的阅读框。 我不能使用Biopython,因为我们自己要做这件事 从我编写的代码中,我将获得以下样式的输出: [“TGC”、“ATG”、“ATA”、“TGG”、“AGG”、“AGG”、“CCG”、“TAA”、“TAG”、“TGA”] 我现在要做的是将起始密码子定义为“ATG”,并获取其索引,同时将终止密码子定义为[“TAA”,“TAG”,“TGA”],如果找到这三个

我目前正在做一个研究项目,我将制作一个python程序,在这个程序中我可以输入DNA序列,从中获取所有可能的阅读框,然后找到任何打开的阅读框。 我不能使用Biopython,因为我们自己要做这件事

从我编写的代码中,我将获得以下样式的输出:
[“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恩里卡尔森帮了忙吗?