具有歧义的重复字符串

时间:2019-05-14 15:20:52

标签: data-structures bioinformatics

我有一大串(5-10百万个)字符串,带有受限制的核苷酸符号字母(A,T,C和G)以及通配符N。每个字符串都有一个与之关联的整数。 / p>

我想找到所有唯一的字符串,并对每个字符串求和它们的整数值。一组相等的字符串的“代表”字符串应为整数值最高的字符串。例如,给定:

NTG 9
NAG 6
ANG 5
TTT 2
ATG 2

我希望输出为:

NTG 14
NAG 6
ATG 2
TTT 2

使用这种大小的数据集,成对比较是不可行的。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为您的目标输出不正确。将“ ATG”匹配到“ ANG”(我已经完成)似乎比将“ ANG”匹配到“ NTG”(您指定的目标)更合适。此解决方案可解决您给定的样本集,但鉴于规模上的巨大差异,可能对您所需的应用没有帮助。

代码:

import re

test = """
NTG 9
NAG 6
ANG 5
TTT 2
ATG 2
"""

test = [x.split(" ") for x in test.upper().split("\n") if x != ""]
#print(test)

index = 0
while index < len(test):
    seq = test[index]
    seq_regex = seq[0].replace("N", ".")
    no_match_li = [x for x in test if len(re.findall(seq_regex, x[0])) == 0]
    match_li = [int(x[1]) for x in test if len(re.findall(seq_regex, x[0])) != 0]
    #print(no_match_li, match_li)
    test = [[seq[0], sum(match_li)]] + no_match_li
    index += 1

test = sorted(test, key=lambda x: x[1], reverse=True)
for seq in test:
    print(seq[0], seq[1])

输出:

NTG 11
NAG 6
ANG 5
TTT 2