【问题标题】:Extract substring in exact order按确切顺序提取子字符串
【发布时间】:2019-04-23 10:36:45
【问题描述】:

我有一个字符串,其中包含三个字母的氨基酸代码序列和 RNA 序列。我想按照它在字符串中出现的确切顺序提取氨基酸代码。

raw_seq = '''GGACUAGCGGAGGCUAGUCC
METGLNLYSGLYASNPHEARGASNGLNARGLYSTHRVAL
LYSCYSPHEASNCYSGLYLYSGLUGLYHISILEALALYS
ASNCYSARGALAPROARGLYSLYSGLYCYSTRPLYSCYS
GLYLYSGLUGLYHISGLNMETLYSASPCYSTHRGLUARG
GLNALAASN'''
ascodes = ['ALA','ARG','ASN','ASP','ASX','CYS','GLU','GLN','GLX','GLY','HIS','ILE','LEU','LYS','MET','PHE','PRO','SER','THR','TRP','TYR','VAL']
for amino in ascodes:
    if amino in raw_seq:
        print(amino)

我的代码按字母顺序返回氨基酸序列,这破坏了它的所有生物学功能。我也尝试了正则表达式,但我想不出一个合适的模式。

【问题讨论】:

  • 您的预期结果是什么?
  • 这看起来像是一个家庭作业,到目前为止你尝试了什么?
  • 嗨@Peet 不要忘记提供一些反馈,以便我们知道我们是否为您解决了问题,请参阅What should I do when someone answers my question?

标签: python string substring match bioinformatics


【解决方案1】:

有点技巧,但使用re.findallstr.join 以确保输出按出现在raw_seq 中的顺序:

import re

re.findall('|'.join(ascodes), raw_seq)

输出:

['MET',
 'GLN',
 'LYS',
 ...
 'ARG',
 'GLN',
 'ALA',
 'ASN']

【讨论】:

    【解决方案2】:

    您可以遍历所有字符并检查当前字符和以下 2 个是否包含在您的氨基酸列表中。

    for i in range(len(raw_seq)):
        amino = raw_seq[i:i+3]
        if amino in ascodes:
            print(amino)
    

    结果如下:

    ['MET'、'GLN'、'LYS'、'GLY'、'ASN'、'PHE'、'ARG'、'ASN'、'GLN'、'ARG'、'GLY'、'LYS ','THR','VAL','LYS','CYS','PHE','ASN','CYS','GLY','LYS','GLU','GLY','HIS', 'ILE'、'ALA'、'LYS'、'ASN'、'CYS'、'ARG'、'ALA'、'PRO'、'ARG'、'GLY'、'LYS'、'LYS'、'GLY ','CYS','TRP','LYS','CYS','GLY','LYS','GLU','GLY','HIS','GLN','MET','LYS', 'ASP'、'CYS'、'THR'、'GLU'、'ARG'、'GLN'、'ALA'、'ASN']

    【讨论】:

      【解决方案3】:
      raw_seq = '''GGACUAGCGGAGGCUAGUCC
      METGLNLYSGLYASNPHEARGASNGLNARGLYSTHRVAL
      LYSCYSPHEASNCYSGLYLYSGLUGLYHISILEALALYS
      ASNCYSARGALAPROARGLYSLYSGLYCYSTRPLYSCYS
      GLYLYSGLUGLYHISGLNMETLYSASPCYSTHRGLUARG
      GLNALAASN'''
      
      ascodes = ['ALA','ARG','ASN','ASP','ASX','CYS','GLU','GLN','GLX','GLY','HIS','ILE','LEU','LYS','MET','PHE','PRO','SER','THR','TRP','TYR','VAL']
      
      raw_seq = raw_seq.replace('\n','')
      
      sep_set =[ raw_seq[i:i+3] for i in range(len(raw_seq)-2)] 
      
      result =[i for i in sep_set if i in ascodes]
      """
      output 
      
      ['MET', 'GLN', 'LYS', 'GLY', 'ASN', 'PHE', 'ARG', 'ASN', 'GLN', 'ARG', 'GLY', 'LYS', 'THR', 'VAL', 'LYS', 'CYS', 'PHE', 'ASN', 'CYS', 'GLY', 'LYS', 'GLU', 'GLY', 'HIS', 'ILE', 'ALA', 'LYS', 'ASN', 'CYS', 'ARG', 'ALA', 'PRO', 'ARG', 'GLY', 'LYS', 'LYS', 'GLY', 'CYS', 'TRP', 'LYS', 'CYS', 'GLY', 'LYS', 'GLU', 'GLY', 'HIS', 'GLN', 'MET', 'LYS', 'ASP', 'CYS', 'THR', 'GLU', 'ARG', 'GLN', 'ALA', 'ASN']
      
      """
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多