【问题标题】:Duplicate Strings with Ambiguity有歧义的重复字符串
【发布时间】:2019-05-16 06:11:09
【问题描述】:

我有一大组(5-1000 万)字符串,其中包含受限的核苷酸符号(A、T、C 和 G)字母表以及通配符 N。每个字符串都有一个与之关联的整数。

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

NTG 9
NAG 6
ANG 5
TTT 2
ATG 2

我希望输出是:

NTG 14
NAG 6
ATG 2
TTT 2

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

【问题讨论】:

  • 这里的合并规则我不太清楚,比如为什么不合并ATG和NTG?你选择 ANG 是因为它的整数值更大?

标签: data-structures bioinformatics


【解决方案1】:

我认为您的目标输出不准确。将“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

【讨论】:

    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多