【发布时间】:2021-06-02 20:13:54
【问题描述】:
我正在尝试编写用于查找 siRNA 的代码。现在我已经编写了一个代码来查找所有可能的 siRNAs 组合。我还需要找到最好的,其中必须包含 30% 到 50% 的 GC 或 CG 核苷酸。
此程序正在搜索 21 个核苷酸长度的序列,其中 CG 或 GC 含量从 30% 到 50%。目前,我的程序只在一个字符串中生成长度为 21 的所有可能的 siRNA,但我需要将所需数量的 GC 或 CG 分开。
我的程序如何使用 K = 2 的示例,这意味着来自 mRNA 的 iRNA 序列的长度:
- 输入 DNA:ATGC
- 它通过将 T 替换为 U 来转换为 mRNA,因此我们得到:AUGC
- 根据 Chargaff 规则,A 到 U,U 到 A,g 到 C,C 到 G 形成互补链,我们得到:UACG
- 现在我们有了一个大 iRNA,现在我们以所有可能的方式将其拆分以获得 siRNA,因此: 所有 iRNA 组合 ['UA'、'AC'、'CG']
最后我想从中选择 C+G 核苷酸含量在 30-50% 范围内的那些。
好吧,我们只有 100 的 CG,但我们将 K 更改为 4,并使用 ATGCCGTA 作为输入。
ATCGCGTA 所有 iRNA 组合 ['UAGC', 'AGCG', 'GCGC', 'CGCA', 'GCAU']
所以,在这里,正确的是 - UAGC 和 GCAU
import re
def converttostr(input_seq, seperator):
# Join all the strings in list
final_str = seperator.join(input_seq)
return final_str
DNA_seq = input("")
RNA_seq = DNA_seq.replace("T", "U")
N = RNA_seq
iRNA = (N.translate(str.maketrans({"A": "U", "G": "C", "U": "A", "C": "G"})))
iRNA_str = iRNA
K = 21
iRNA_comb = [iRNA[i: j] for i in range(len(iRNA_str)) for j in range(i + 1, len(iRNA_str) + 1) if len(iRNA_str[i:j]) == K]
print("All iRNA combinations", iRNA_comb)
seperator = ', '
LtS = converttostr(iRNA_comb, seperator)
print("List converted to string: ", LtS)
CG = re.split(" CG |[^a-zA-Z ]+",LtS)
print("siRNA with CG founded",CG)
【问题讨论】:
-
你能解释一下逻辑吗,即最后一个有30%-50%的GC核苷酸?因为 6/11 是 54.5%
-
最后一个只是一个例子,它不应该在 30-50% 的范围内。
-
@OrkBiotechnologist 你应该提供工作输入和输出值,无论如何我在下面提供了一个答案希望它有所帮助。
-
@OrkBiotechnologist 请提供输入和预期输出,以便我们推导出所需的逻辑
标签: python python-3.x string bioinformatics