更改列表中字符串部分的值获取字符串的总和
Change value of portion of a string within a list get sum of string
我正在努力使用 itertools 来获取组合列表,但是一旦我有了这些组合,我就无法控制它们。这是我拥有的:
k_instances = 3 #Instances of lysine
k_modifications = {'Hydroxylation', 'Carboxylation', #Modifications applicable to lysine
}
k_combinations = itertools.combinations_with_replacement(k_modifications, k_instances) #Possible modifications assigned
k_comb_list = list(k_combinations) #Convert combinations to a list
k_comb_list_str = [k_comb_list[i:i+k_instances] for i in range(0, len(k_comb_list), k_instances)]
for i in range(len(k_comb_list_str)):
k_comb_list_str[i] = 16 if k_comb_list_str[i] == 'Hydroxylation' else k_comb_list_str[i]
print(k_comb_list_str)
当运行这个时,我得到:
[[('Carboxylation', 'Carboxylation', 'Carboxylation'), ('Carboxylation', 'Carboxylation', 'Hydroxylation'), ('Carboxylation', 'Hydroxylation', 'Hydroxylation')], [('Hydroxylation', 'Hydroxylation', 'Hydroxylation')]]
我的想法是用它们的质量替换这些变量中的每一个,例如用 16 替换所有出现的 Carboxylation。这样做我想得到一个字符串列表,如下所示:
[[(16,16,16),(16,16,2),(16,2,2)...]]
然后我会得到每个字符串的总和:
[[(48),(32),(20)]]
然后基本上有一个基于组合的可能值列表。
我确信有一种更简单的方法可以执行此操作,因此我们将不胜感激有关如何执行此操作的任何建议。我曾尝试使用 else if 语句替换每个值,但它不起作用,因为我无法弄清楚如何在字符串中进行操作,所以我只能搜索字符串,这违背了目的。
最简单的选择是制作各种分子变量并使用它们,而不是稍后尝试进行字符串替换。例如:
import itertools
Hydroxylation = 2
Carboxylation = 16
k_instances = 3
k_modifications = [Hydroxylation, Carboxylation]
k_combinations = itertools.combinations_with_replacement(k_modifications, k_instances)
k_comb_l = list(k_combinations)
print(k_comb_l)
# [(16, 16, 16), (16, 16, 2), (16, 2, 2), (2, 2, 2)]
print([sum(x) for x in k_comb_l])
# [48, 34, 20, 6]
我正在努力使用 itertools 来获取组合列表,但是一旦我有了这些组合,我就无法控制它们。这是我拥有的:
k_instances = 3 #Instances of lysine
k_modifications = {'Hydroxylation', 'Carboxylation', #Modifications applicable to lysine
}
k_combinations = itertools.combinations_with_replacement(k_modifications, k_instances) #Possible modifications assigned
k_comb_list = list(k_combinations) #Convert combinations to a list
k_comb_list_str = [k_comb_list[i:i+k_instances] for i in range(0, len(k_comb_list), k_instances)]
for i in range(len(k_comb_list_str)):
k_comb_list_str[i] = 16 if k_comb_list_str[i] == 'Hydroxylation' else k_comb_list_str[i]
print(k_comb_list_str)
当运行这个时,我得到:
[[('Carboxylation', 'Carboxylation', 'Carboxylation'), ('Carboxylation', 'Carboxylation', 'Hydroxylation'), ('Carboxylation', 'Hydroxylation', 'Hydroxylation')], [('Hydroxylation', 'Hydroxylation', 'Hydroxylation')]]
我的想法是用它们的质量替换这些变量中的每一个,例如用 16 替换所有出现的 Carboxylation。这样做我想得到一个字符串列表,如下所示:
[[(16,16,16),(16,16,2),(16,2,2)...]]
然后我会得到每个字符串的总和:
[[(48),(32),(20)]]
然后基本上有一个基于组合的可能值列表。
我确信有一种更简单的方法可以执行此操作,因此我们将不胜感激有关如何执行此操作的任何建议。我曾尝试使用 else if 语句替换每个值,但它不起作用,因为我无法弄清楚如何在字符串中进行操作,所以我只能搜索字符串,这违背了目的。
最简单的选择是制作各种分子变量并使用它们,而不是稍后尝试进行字符串替换。例如:
import itertools
Hydroxylation = 2
Carboxylation = 16
k_instances = 3
k_modifications = [Hydroxylation, Carboxylation]
k_combinations = itertools.combinations_with_replacement(k_modifications, k_instances)
k_comb_l = list(k_combinations)
print(k_comb_l)
# [(16, 16, 16), (16, 16, 2), (16, 2, 2), (2, 2, 2)]
print([sum(x) for x in k_comb_l])
# [48, 34, 20, 6]