1

我的问题是,如果你有一串 DNA,你怎么能列出所有可能的连续三胞胎?例如,如果您有以下字符串:

ACCTAA

我需要创建所有可能的连续三元组的列表,例如:

ACC、CCT、CTA、TAA

我怎么能做到这一点?

到目前为止,我只知道如何通过将字符串等间隔划分来创建三元组列表:

list_of_triplet = [dna[i:i+3] for i in range(0, len(dna), 3)]

dna输入字符串在哪里。

感谢您的任何建议!

4

2 回答 2

0

您快到了。让我们删除函数中的第三个参数range(您真的不想将字符串分成三个一组)。另外,我们想在只剩下 3 个字符时停止,所以第二个参数应该是len(dna) - 2. 有了这一切,你有:

list_of_triplet = [dna[i:i+3] for i in range(0, len(dna) - 2)]

如果您不想重复三元组​​,则可以改用集合推导:

list_of_triplet = {dna[i:i+3] for i in range(0, len(dna) - 2)}
于 2021-09-08T11:12:12.847 回答
0

您有多种选择

带迭代器

unique_triplets = set(dna[i:i+3] for i in range(len(dna) - 2)
print(unique_triplets)
# {'ACC', 'TAA', 'CTA', 'CCT'}

随着迭代

unique_triplets = set()
for i in range(len(dna) - 2):
    unique_triplets.add(dna[i:i+3])
print(unique_triplets)
# {'ACC', 'TAA', 'CTA', 'CCT'}

如果您想要计数值,请使用defaultdict.

from collections import defaultdict
unique_triplets = defaultdict(int)
for i in range(len(dna) - 2):
    unique_triplets[dna[i:i+3]] += 1

print(unique_triplets)
# defaultdict(<class 'int'>, {'ACC': 1, 'CCT': 1, 'CTA': 1, 'TAA': 1})
于 2021-09-08T11:16:39.603 回答