我有一大串(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
使用这种大小的数据集,成对比较是不可行的。有什么想法吗?
答案 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