我正在使用python 2.7。
例如,我的公式为for (int i = 0; i < 10; i++) {
LocalDateTime time = LocalDateTime.of(LocalDate.now(),
LocalTime.of(random.nextInt(24), random.nextInt(60),
random.nextInt(60), random.nextInt(999999999 + 1)));
System.out.println(time);
}
。我使用下面的代码
C6H12O6
得到了这个结果:
formula='C6H12O6'
s = re.findall('([A-Z][a-z]?)([0-9]*)', formula)
从这里开始,我试图找出如何做到这一点:
s= [('C', '6'), ('H', '12'), ('O', '6')]
请有人帮忙,我已经被困在这里将近一天了。 我也很欣赏其他任何想法。
答案 0 :(得分:1)
您可以创建一个权重字典,将元素的字符映射到各自的原子权重,并使用sum()
函数对您拥有的列表值进行求和。
weights = {'C': 12, 'H': 1, 'O': 16}
s = [('C', '6'), ('H', '12'), ('O', '6')]
total = sum((weights[e] * int(i)) for e, i in s) # 180
答案 1 :(得分:0)
这应该有用,只需为整个elem_weight
获取更完整的字典(周期表)import re
formula='CH12O6' #example molecule with singular element
s = re.findall('([A-Z][a-z]?)([0-9]*)', formula)
elem_weight = {'C': 12, 'H': 1, 'O': 16}
total_weight = 0
for elem, count in s:
#For singular elements
if count=='':
count = 1
total_weight += int(count)*elem_weight[elem]
print total_weight