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

如何替换itertools生成的修饰组合中字符串为质量值并计算总质量

你原来的代码问题在于k_comb_list_str是两层嵌套的列表结构(外层列表的元素是子列表,子列表的元素才是存储修饰名的元组),你直接对外层列表的元素做字符串判断,当然匹配不到任何内容,无法完成替换。

最简单的实现方案如下,先定义修饰名称和质量的映射字典,比写多重条件判断更易维护,之后遍历嵌套结构逐元素替换即可:

import itertools

k_instances = 3 # 赖氨酸的数量
# 定义修饰和对应质量的映射
mod_mass_map = {
    'Hydroxylation': 2,
    'Carboxylation': 16
}
k_modifications = mod_mass_map.keys() # 直接从映射取修饰名列表

# 生成修饰组合
k_combinations = itertools.combinations_with_replacement(k_modifications, k_instances)
k_comb_list = list(k_combinations)
# 保留你原来的按k_instances分组的逻辑
k_comb_list_str = [k_comb_list[i:i+k_instances] for i in range(0, len(k_comb_list), k_instances)]

# 1. 替换为质量值的列表
mass_comb_list = [
    [tuple(mod_mass_map[mod] for mod in tup) for tup in sub_list]
    for sub_list in k_comb_list_str
]
print("替换质量后的列表:", mass_comb_list)
# 输出:[[(16, 16, 16), (16, 16, 2), (16, 2, 2)], [(2, 2, 2)]]

# 2. 每个元组求和得到总质量列表
sum_mass_list = [
    [sum(tup) for tup in sub_list]
    for sub_list in mass_comb_list
]
print("总质量列表:", sum_mass_list)
# 输出:[[48, 34, 20], [6]] 注:你示例中16+16+2求和为32属于笔误,实际计算结果为34

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:02