如何用字典记录RNA二级结构中的碱基配对索引对?
解决RNA二级结构碱基配对索引匹配问题
你有两个字符串:RNA_SS(包含线性化的RNA二级结构信息,用<和>表示核苷酸间的碱基配对,规则为连续<的第一个对应连续>的最后一个,依次向内匹配),以及RNA_seq(对应RNA序列)。需要生成记录配对索引的字典,例如bps = {2:12, 3:11, 4:10, 5:9, 13:18 , 14:17},但现有代码仅返回{14: None},问题代码如下:
bps={} for idx,sym in enumerate(RNA_SS): if sym == "<": bps=dict.fromkeys([idx]) print(bps)
问题原因
你之前的代码每次遇到<时,都会用dict.fromkeys([idx])重新赋值bps,这会直接覆盖之前的字典内容,最终只会保留最后一个<的索引,且值默认设为None,所以得到错误结果。
正确实现方法
这类嵌套配对问题适合用栈来处理,逻辑如下:
- 遇到
<时,将当前索引压入栈中暂存 - 遇到
>时,弹出栈顶的索引(即当前>对应的<位置),将两者的配对关系存入字典
代码实现:
bps = {} stack = [] for idx, sym in enumerate(RNA_SS): if sym == "<": stack.append(idx) elif sym == ">": if stack: # 避免出现无对应<的>导致报错 left_idx = stack.pop() bps[left_idx] = idx # 若需要双向配对映射,可添加这行:bps[idx] = left_idx print(bps)
比如假设RNA_SS为"..<<<<....>>>>..<<..>>..",运行后会生成符合你需求的配对字典,键是<的索引,值是对应>的索引。
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

