我目前正在做一个研究项目,我要做一个python程序,在这个程序中,我可以输入DNA序列,从中获得所有可能的阅读框架,然后找到任何开放阅读框架。我不能使用Biopython,因为我们要自己做这件事。
从我编写的代码中,我将获得以下样式的输出:["TGC", "ATG", "ATA", "TGG", "AGG", "AGG", "CCG", TAA", "TAG", "TGA"]
我现在要做的是将起始密码子定义为"ATG“,并获取其索引,并将终止密码子定义为["TAA", "TAG", "TGA"],如果找到这三个密码子中的任何一个,则报告第一个找到的密码子的索引,其余的忽略。如果没有找到终止密码子,则返回某个字符串。
除此之外,我希望能够比较上面提到的风格中最多6个不同输入的“长度”,并选择最长的一个。
这是我第一次在这里发帖,如果问题表达得不好,我深表歉意,谢谢大家的帮助!
发布于 2021-05-17 22:51:31
较长字符串中的字符串
我不完全确定这是否是您想要的,但是要在一个较长的字符串中找到第一个出现的字符串,您可以这样做,例如
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]请注意,对于不匹配的内容,您将获得-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)它会产生输出
{'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_list中找到哪个元素。您可以将打印语句修改为所需的任何功能,但必须保留remove语句,否则生成器将找到多个匹配项。
https://stackoverflow.com/questions/67571270
复制相似问题