在每个序列中查找唯一的字符串

时间:2015-12-07 20:44:01

标签: python python-3.x unique bioinformatics

我正在尝试创建一个程序,该程序将多个tRNA序列存储为字典。我已经设置了我的代码来提取和存储序列以及与序列相关的特定名称:

Safari/7046A194A

我正在调用网站功能(这就是为什么它运行起来更干净的第一步),但是我很遗憾如何编写代码来查找每个存储序列中的唯一字符串。

例如,如果我有两组序列:

  1. class Unique(): def __init__(self, seq = ''): for s in range(len(seq)): for e in range(s + 1, len(seq) + 1): self.add(seq[s:e]) self.head = head self.sequence = seq self.original = {} def cleaner(self): for (header, sequence) in myReader.readFasta(): clean = sequence.replace('-','').replace('_','') self.original[self.head] = clean return self.original def sites(self): Unique.cleaner(self)
  2. UCGUUAGC
  3. 该程序可以告诉我第一个序列的唯一字符串是AGCGCAUU,而第二个字符串是UCG,因为AGC仅存在在第一个序列中,UCG仅存在于第二个序列中。

    编辑:我的意思是独特的序列:我能看到的序列的任何链,并自动知道它来自哪个序列。因此,如果链AGC仅存在于一个序列中,则将其计数并保存为与该序列关联的唯一链。

    提取的序列如下所示:

    UCGA

1 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,你想要序列A的所有子串在序列B中不存在。

使用set complement or difference可以轻松实现这一目标。

I "stole" some code from another answer

def get_all_substrings(input_string):
  length = len(input_string)
  return [input_string[i:j+1] for i in xrange(length) for j in xrange(i,length)]

# convert these to sets to remove duplicate substrings
seq1 = set(get_all_substrings('UCGUUAGC')) 
seq2 = set(get_all_substrings('AGCGCAUU'))

unique_seq1 = seq1 - seq2 # those sequences that are in seq1, and not in seq2
unique_seq2 = seq2 - seq1 # those sequences that are in seq2, and not in seq1

<强>更新 正如评论中所指出的那样,我复制的get_all_substrings方法会在内存中消耗掉大字符串,这个版本更加流行,因为它懒得获得下一个子字符串

def get_all_substrings(string):
    length = len(string)
    for i in xrange(length):
        for j in xrange(i + 1, length + 1):
            yield(string[i:j])