如何替换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
相关产品推荐
相关产品推荐

