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

Python实现:从氨基酸序列比对结果获取目标序列对应有效索引

参考序列索引到目标序列索引映射实现

已知条件

  • 参考序列:SCAASGGSEYGTLVTVSSRGRHHHHHH
  • 目标序列:SCAASVRGTQVTVSSGPGGQHHHHHH
  • 序列比对结果(-表示插入空位):
SCAASGGSEYGTLVTVSSR--GRHHHHHH
SCAAS---VRGTQVTVSSGPGGQHHHHHH

功能要求

输入比对前的参考序列索引列表,查询其对应到比对前的目标序列的索引,若比对结果中参考索引对应位置的目标序列字符为插入空位-则忽略该条记录,最终输出过滤后的有效索引列表。

示例:
输入参考序列索引:[0, 5, 20]
对应参考序列氨基酸:['S', 'G', 'R']
比对后对应目标序列字符:['S', '-', 'Q']
对应目标序列原始索引:[0, 'N/A', 19]
最终输出有效索引列表:[0, 19]

Python实现代码

def map_ref_index_to_target(ref_align: str, target_align: str, ref_indices: list[int]) -> list[int]:
    # 构建参考原始索引到比对位置的映射
    ref_ori_to_align = {}
    current_ref_idx = 0
    for align_pos, char in enumerate(ref_align):
        if char != "-":
            ref_ori_to_align[current_ref_idx] = align_pos
            current_ref_idx += 1
    
    # 构建比对位置到目标原始索引的映射
    align_to_target_ori = {}
    current_target_idx = 0
    for align_pos, char in enumerate(target_align):
        if char != "-":
            align_to_target_ori[align_pos] = current_target_idx
            current_target_idx += 1
    
    # 筛选有效映射结果
    result = []
    for ref_idx in ref_indices:
        if ref_idx not in ref_ori_to_align:
            continue
        align_pos = ref_ori_to_align[ref_idx]
        if align_pos in align_to_target_ori:
            result.append(align_to_target_ori[align_pos])
    return result

# 功能测试
if __name__ == "__main__":
    ref_align = "SCAASGGSEYGTLVTVSSR--GRHHHHHH"
    target_align = "SCAAS---VRGTQVTVSSGPGGQHHHHHH"
    input_indices = [0, 5, 20]
    print(map_ref_index_to_target(ref_align, target_align, input_indices))
    # 运行输出:[0, 19]

内容的提问来源于stack exchange,提问作者lanselibai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:45:01