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

如何用字典推导式优化生物信息学带伪计数的motif计数矩阵生成代码

带伪计数的Motif计数矩阵实现

需求描述

实现一个接收核苷酸motif字符串列表的函数,统计每一列中A、C、G、T四种核苷酸的出现次数,每个统计结果加1伪计数,最终输出单键对应多值的字典格式结果,禁止使用biopython、numpy等第三方库。

输入样例

Motifs =[
    "AACGTA", 
    "CCCGTT", 
    "CACCTT", 
    "GGATTA", 
    "TTCCGG"
]

输出样例

count ={
    'A': [2, 3, 2, 1, 1, 3], 
    'C': [3, 2, 5, 3, 1, 1], 
    'G': [2, 2, 1, 3, 2, 2], 
    'T': [2, 2, 1, 2, 5, 3]
}

原有实现

原有版本逻辑正确,通过两次循环分别初始化伪计数、累加统计实际出现次数:

def CountWithPseudocounts(Motifs):
    t = len(Motifs)
    k = len(Motifs[0])
    count = {}
    for symbol in "ACGT":
        count[symbol] = [1 for j in range(k)]
    for i in range(t):
        for j in range(k):
            symbol = Motifs[i][j]
            count[symbol][j] += 1
    return count

字典推导式优化版本

利用Python内置的zip(*可迭代对象)特性可以直接将motif列表转置为列集合,结合字典推导式+列表推导式即可直接生成目标结果,完全替换原有两层循环逻辑:

def CountWithPseudocounts(Motifs):
    cols = list(zip(*Motifs))
    return {base: [1 + col.count(base) for col in cols] for base in "ACGT"}

逻辑说明

  1. zip(*Motifs)会把输入的每一条序列作为行,转置后得到每一列所有位置的核苷酸集合
  2. 外层字典推导式遍历ACGT四个碱基作为返回字典的键
  3. 内层列表推导式遍历每一列,统计当前碱基在该列的出现次数,加1后作为列表对应位置的数值
    该实现完全不依赖第三方库,输出格式和要求完全匹配,运行效率和原有实现一致,代码更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:36:00