【问题标题】:How to get a string between two short strings in a Dictionary... Python如何在字典中的两个短字符串之间获取字符串... Python
【发布时间】:2016-01-29 07:40:25
【问题描述】:

早上好。 我有一个字典(在 python 中),键作为名称,值作为 dna 序列('acgt...')。我需要从这本字典的值中获取两个特定三个字母之间的所有字符串(“atg”作为起点,“taa”、“aag”或“tga”作为终点)。我尝试了几件事,但没有得到我想要的任何东西。而且我在互联网上找不到任何帮助。有人可以帮助我吗?谢谢

这是我尝试过的:

我只知道如何获取两个不同指定索引之间的所有字符,但这不是我想要的:这是一个非常小的示例:

opts= {'id1':'acgatgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaaacatcgaca‌​gctctcgcgcgcaagcgatacaccagctagaccagattaaaag', 'id2':'atgagacacacacacacagggggggcggcgcgcatacatttttacacacatacattaaatgacacagccacag‌​cgacagccagccagccatttttattttttaaagatgcaccgatacacaca'}; 
keys=list(opts.keys())
print(keys)
value=list(opts.values())
print(value)
i='atg'
j='taa' 
for i in range (len(value)): 
  for j in range(i): 
    print(value[j:i])

【问题讨论】:

  • 请发布您尝试过的任何内容。
  • 你尝试了什么,没有成功?
  • 如果你能设置一个字符串的例子和你期望得到的结果,那就更好了!
  • 请阅读this
  • 请@Francisco,将示例添加到原始问题(编辑)。

标签: python string dictionary


【解决方案1】:

这个问题可以通过Python的find函数来解决。由于您的开始是固定的,而结束可以是三个字符串之一,我们将遍历输入字符串以找到匹配的字符串。

str = "acgatgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaaacatcgaca‌​gctctcgcgcgcaagcgatacaccagctagaccagattaaaag"

def str_between( str, first, last ):
    start = str.find( first ) + len( first )
    end = str.find( last[0], start )
    index = 1
    while(end == -1 and index < len(last) ):
            end = str.find( last[index], start )
            index= index + 1
    if end !=-1:
            return str[start:end]
    else:
            return ''

使用两个参数调用此函数,如下所述。您必须将每个键的值作为输入传递。

output = str_between( str, "atg", ["taa","aag","tga"] )

【讨论】:

  • 谢谢!你的代码返回了一个错误:第 29 行:NameError:未定义名称 's' 第 29 行:返回 s[start:end]
  • 错误是什么?我改变了一点。再检查一遍。我跑了没有报错。查看字符串是否被正确复制。如果没有匹配,我也没有进行错误处理。照顾好它。
  • 非常感谢Sharad... 最后一个问题,希望我不要打扰太多。正如您在此字符串中看到的那样,有几个起点和几个终点。如何获取起点和终点之间所有可能片段的字符串。我自己解释吗?谢谢。
  • 你可以这样做。探索 Python 的 re 模块的 findall() 方法。您可以找到字符串中所有出现的子字符串的索引。为您的起始字符串和结束字符串执行此操作。这将为您提供所有起点和终点。您可以使用这些值来获得所需的输出。
【解决方案2】:
import re
    d = {'id1':'acgatgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaaacatcgaca‌​gctctcgcgcgcaagcgatacaccagctagaccagattaaaag',
         'id2':'atgagacacacacacacagggggggcggcgcgcatacatttttacacacatacattaaatgacacagccacag‌​cgacagccagccagccatttttattttttaaagatgcaccgatacacaca'}

    for k,v in d.items():
        dna = re.split(r'\W',v)
        for el in dna:
            if el:
             mo= re.search(r'(atg.*taa|atg.*tga|atg.*aag)', el)
             if mo:
                 print(mo.group(1))

    atgagacacacacacacagggggggcggcgcgcatacatttttacacacatacattaa
    atgctagcagctagcacagctagaatgccgatgacacacagctaatggcagttaa

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多