【问题标题】:How to find all possible consecutive triplets in a string?如何在字符串中找到所有可能的连续三元组?
【发布时间】:2021-09-07 12:23:51
【问题描述】:

我的问题是,如果您有一串 DNA,您如何创建所有可能的连续三胞胎的列表?例如,如果您有以下字符串:

ACCTAA

我需要创建一个所有可能的连续三元组的列表,这样:

ACC、CCT、CTA、TAA

我怎样才能做到这一点?

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

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

dna 是输入字符串。

感谢您的任何建议!

【问题讨论】:

  • 你的方法很好。将 list() 更改为 set() 以获得独特的三元组。
  • 感谢您的帮助!但是,我没有在我的代码中使用 list() 函数。你能澄清一下我应该在哪里更改代码吗?我错过了什么吗?
  • list()是python中的对象类型,你也可以使用[]来做。我有点不清楚,但这里的两个答案都显示了创建不同对象的两种方式。

标签: python string tuples bioinformatics triplet


【解决方案1】:

你快到了。让我们删除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)}

【讨论】:

  • 谢谢!!!它完美地工作!我不认为当剩下的字符串少于 3 个时它需要停止,但这是合乎逻辑的。再次感谢您的协助。 :)
【解决方案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})

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2023-04-05
    相关资源
    最近更新 更多