首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找较长字符串中多个不同字符串的第一个匹配项

查找较长字符串中多个不同字符串的第一个匹配项
EN

Stack Overflow用户
提问于 2021-05-17 22:04:30
回答 1查看 70关注 0票数 0

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

从我编写的代码中,我将获得以下样式的输出:["TGC", "ATG", "ATA", "TGG", "AGG", "AGG", "CCG", TAA", "TAG", "TGA"]

我现在要做的是将起始密码子定义为"ATG“,并获取其索引,并将终止密码子定义为["TAA", "TAG", "TGA"],如果找到这三个密码子中的任何一个,则报告第一个找到的密码子的索引,其余的忽略。如果没有找到终止密码子,则返回某个字符串。

除此之外,我希望能够比较上面提到的风格中最多6个不同输入的“长度”,并选择最长的一个。

这是我第一次在这里发帖,如果问题表达得不好,我深表歉意,谢谢大家的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-17 22:51:31

较长字符串中的字符串

我不完全确定这是否是您想要的,但是要在一个较长的字符串中找到第一个出现的字符串,您可以这样做,例如

代码语言:javascript
复制
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)

它将产生输出

代码语言:javascript
复制
[1, 2, 35, -1]

请注意,对于不匹配的内容,您将获得-1

字符串列表中的字符串

如果要为另一个列表中的每个元素查找列表中的第一个匹配项,可以执行以下操作

代码语言:javascript
复制
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)

它会产生输出

代码语言:javascript
复制
{'ATG': 1, 'TAA': 5}

替代方案

如果您想要一个较少遍历列表a_list的解决方案,您可以更多地依赖列表生成器,如以下示例所示

代码语言:javascript
复制
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_list中找到哪个元素。您可以将打印语句修改为所需的任何功能,但必须保留remove语句,否则生成器将找到多个匹配项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67571270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档