我的问题是,如果你有一串 DNA,你怎么能列出所有可能的连续三胞胎?例如,如果您有以下字符串:
ACCTAA
我需要创建所有可能的连续三元组的列表,例如:
ACC、CCT、CTA、TAA
我怎么能做到这一点?
到目前为止,我只知道如何通过将字符串等间隔划分来创建三元组列表:
list_of_triplet = [dna[i:i+3] for i in range(0, len(dna), 3)]
dna
输入字符串在哪里。
感谢您的任何建议!
我的问题是,如果你有一串 DNA,你怎么能列出所有可能的连续三胞胎?例如,如果您有以下字符串:
ACCTAA
我需要创建所有可能的连续三元组的列表,例如:
ACC、CCT、CTA、TAA
我怎么能做到这一点?
到目前为止,我只知道如何通过将字符串等间隔划分来创建三元组列表:
list_of_triplet = [dna[i:i+3] for i in range(0, len(dna), 3)]
dna
输入字符串在哪里。
感谢您的任何建议!
您快到了。让我们删除函数中的第三个参数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)}
您有多种选择
带迭代器
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})