- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 RNA 序列,看起来像这样。每个字符代表一个核苷酸(程序员可以忽略这一点,你可以把它们当作元素):
(((((((..((((.....(..)))).((((.........)))).....(((((..)....))))))))))))....
为了问题的目的,我将使用这个术语:
( = lhb
) = rhb
. = dot
所以本质上,具有 lhb 的元素连接到具有 rhb 的元素,并且所有的点都是自由区域。它们的连接方式很复杂。很难用语言表达,所以为了方便起见,我将在一些元素下方放置数字,这些元素是相连的:
(((((((..((((.....(..)))).((((.........)))).....(((((..)....))))))))))))....
1 2 2 3 3 45 5 4 1
我认为这会让您了解它们之间的联系。我有兴趣找出连接元素的位置和空闲区域。
(例如,元素 1 连接到元素 72,元素 8 到 9 是空闲的)。
我选择 C 来编写代码,但我离逻辑还很远。
此外,用 C 编程变得越来越困难。我觉得可以使用正则表达式在 python 中轻松地完成此操作,或者可能是 perl,但我对这些语言没有太多经验。所以,如果有人能提供一种更简单的方法,那将是一个巨大的帮助。也欢迎改进 C 代码的想法。这是我的 C 代码:-
#include <stdio.h>
int main() {
char dot[500];
int i = 0, j = 0;
int count = 0, count1 = 0, count2 = 0;
int lhb[100];
int rhb[100];
int dots[100];
int pair_1[100];
int pair_2[100];
int pair_3[100];
FILE * fp;
fp = fopen("structure.txt", "r");
while (fscanf(fp, "%c", & dot[i]) != EOF) {
i++;
}
fclose(fp);
for (i = 0; dot[i] != '\0'; i++) {
if (dot[i] == '(') {
lhb[count] = dot[i];
pair_1[count] = i;
count++;
}
else if (dot[i] == '.') {
rhb[count1] = dot[i];
pair_2[count1] = i;
count1++;
}
else {
dots[count2] = dot[i];
pair_3[count2] = i;
count2++;
}
}
printf("Base-pair details :\n");
for (j = 0; j < count; j++)
printf("%d--%d\n", pair_1[j] + 1, pair_3[count - j - 1] + 1);
printf("Loop details :\n");
// for(j=0;j<=count;j++)
// printf("--%d-",pair_2[j]+1);
return 0;
}
最佳答案
这是一个可能的解决方案。 Free 包含一个索引每个点的列表,而 pairs 包含一个元组列表,这些元组具有每对的索引。这是在您的数据是完美的假设下运行的(即左右对的数量相同,左对之前没有右对。)但是,可以修改它以检查边缘情况。根据您的问题,我从 1 而不是 0 开始索引。
data = '(((((((..((((.....(..)))).((((.........)))).....(((((..)....))))))))))))....'
left = []
group = []
prev = ''
free = []
pairs = []
for index, elem in enumerate(data, 1):
if elem == '.' and prev == '.':
group.append(index)
elif elem == '.':
group = [index]
else:
if len(group) >= 1:
free.append(group)
group = []
if elem == '(':
left.append(index)
elif elem == ')':
pairs.append([left.pop(), index])
prev = elem
if len(group) > 0:
free.append(group)
pairs.sort()
输出:
[[1, 72], [2, 71], [3, 70], [4, 69], [5, 68], [6, 67], [7, 66], [10, 65], [11, 25], [12, 24], [13, 23], [19, 22], [27, 43], [28, 42], [29, 41], [30, 40], [49, 64], [50, 63], [51, 62], [52, 61], [53, 56]]
[[8, 9], [14, 15, 16, 17, 18], [20, 21], [26], [31, 32, 33, 34, 35, 36, 37, 38, 39], [44, 45, 46, 47, 48], [54, 55], [57, 58, 59, 60]]
代码通过对每个元素迭代一次来工作。如果遇到左括号,它会将索引附加到列表中。当它遇到右括号时,它会弹出最后看到的左括号的索引,从而创建一对。至于空闲点,跟踪前一个元素会告诉您如何处理每个点。如果已经看到了,则继续添加到当前列表中,否则开始一个新的列表。
关于python - 找出给定结构中的 RNA 碱基配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066448/
我正在开发一种工具来可视化 RNA 二级结构,为此我实现了 Nussinov 算法,该算法将 RNA 二级结构生成为带有相应索引的列表,代码可以在这里找到 [0] [0] http://dpaste.
我有一个基因序列 - "acguccgcaagagaagccuuaauauauucaaaaagcuacgccucagauuucgcgcucgagcccaaaacaacugguguacggguugauc
我最近学习了多维阵列,并接到了分析 RNA 链并将其转化为蛋白质序列的任务。我决定利用我在多维阵列方面的知识来定义密码子(3 个 RNA 碱基的一组)将转化为的每个氨基酸。 //RNA codon t
我目前正在学习多维数组,任务是分析 RNA 序列链(来自 .txt 文件)。这是一个链的例子: AUGCUUAUUAACUGAAAACAUAUGGGUAGUCGAUGA 根据这个字符串,我要弄清楚这条
我有一个 RNA 序列,看起来像这样。每个字符代表一个核苷酸(程序员可以忽略这一点,你可以把它们当作元素): (((((((..((((.....(..)))).((((......
寻找有关如何处理我的 Perl 编程作业以编写 RNA 合成程序的建议。我总结并概述了下面的程序。具体来说,我正在寻找对以下 block 的反馈(我将编号以方便引用)。我已经阅读了 Andrew Jo
我正在与正则表达式作斗争。 我想做这样的东西: if (sequence.matches(A|T|G|C)){ String type = "DNA" } elseif (sequence.match
尝试完成此 Exercism javascript 测试,但未按我的预期工作。 我对 switch 语句很陌生,所以这里可能会出错,也许使用数组是不必要的。无论哪种方式,我的最终 rnaString.
我之前在编程文档中遇到过术语“RNA”和“RNA 属性”。有人可以向我解释一下这些术语的含义吗? 这些是适用于多种语言的通用编程术语,还是非通用术语?很难避免获得与生物学相关的搜索结果,而我去过的编程
我正在尝试在 Swift 中返回给定 DNA 链(字符串)的 RNA 互补序列。基本上,如果 DNA 有一个“T”,我会用“U”代替它。 我的代码是: func toRNA(DNA: String)
我正在研究一个读取 DNA 并找到其 RNA 的项目(我必须在 Perl 中实现它,但我不擅长它)。将该 RNA 分成三联体,以获得它的等效蛋白质名称。我将解释步骤: 1) 将以下 DNA 转录为 R
我正在尝试使用 Python 将 DNA 代码转换为 RNA 代码... 我这样写: print('Digite a sequência DNA a ser transcrita para RNA:'
我正在开发一个简单的工具,用户可以在其中输入他们的字符串或 RNA 或 DNA,然后单击一个按钮,然后将其转录。当我单击我的转录或反向转录 JButton 时,没有任何反应!请帮忙!任何方向,提示或帮
我想要的:创建一个“ list ”,用于在目录中的多个 fastq 文件上运行 Rail-RNA ( http://rail.bio/ ),格式如下: FASTQ URL 1 (tab) option
我是一名优秀的程序员,十分优秀!