You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用字典记录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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:13:09