Python 如何在列表中将系数与其变量分开?

Python 如何在列表中将系数与其变量分开?,python,python-2.7,Python,Python 2.7,因此,我的问题比标题所暗示的要多一些。我正在写一个程序来计算化合物的摩尔质量。到目前为止,我已经用它来研究每种元素不超过一种的化合物,比如NaCl,但是我需要它来计算H2O的质量。以下是我目前掌握的代码: import re atomic_wt = {'Na':22.99, 'Cl':35.45, 'H':1.008, 'O':16} input = raw_input() elementList = (re.findall('[A-Z][^A-Z]*', input)) wt_list = [

因此,我的问题比标题所暗示的要多一些。我正在写一个程序来计算化合物的摩尔质量。到目前为止,我已经用它来研究每种元素不超过一种的化合物,比如NaCl,但是我需要它来计算H2O的质量。以下是我目前掌握的代码:

import re
atomic_wt = {'Na':22.99, 'Cl':35.45, 'H':1.008, 'O':16}
input = raw_input()
elementList = (re.findall('[A-Z][^A-Z]*', input))
wt_list = []

for element in elementList:
    elem_wt = atomic_wt[element]
    wt_list.append(elem_wt)

#    print elem_wt

print "%sg" % sum(wt_list)

当我输入类似H2O的内容时,它会返回一个错误,表示H2不在我的字典中。你建议我怎样把H和2分开?还有,你建议我如何告诉它在进行加法之前将元素的值乘以它们的系数?

我在你的代码中做了一定的修改,以将系数从使用正则表达式取出的元素中分离出来

import re
atomic_wt = {'Na':22.99, 'Cl':35.45, 'H':1.008, 'O':16}
input = raw_input()
elementList = (re.findall('[A-Z][^A-Z]*', input))
wt_list = []

for element_withcoeff in elementList:
    #Separate the coefficients
    coeffList = re.findall(r'\d+', element_withcoeff)
    if len(coeffList) < 1:
        coeff = 1 #If no coefficent is defined use 1 as default 
    else:
        coeff = int(coeffList[0])

    #Separate the element name for dictionary lookup
    element = filter(lambda c: not c.isdigit(), element_withcoeff)
    print coeff, element

    #Calculate using coeff
    elem_wt = coeff * atomic_wt[element]
    wt_list.append(elem_wt)

print "%sg" % sum(wt_list)
重新导入
原子_wt={'Na':22.99,'Cl':35.45,'H':1.008,'O':16}
输入=原始输入()
elementList=(关于findall(“[A-Z][^A-Z]*”,输入))
wt_列表=[]
对于元素列表中带有系数的元素_:
#分离系数
coeffList=re.findall(r'\d+',带有coeff的元素_)
如果len(coeffList)<1:
系数=1#如果未定义系数,则使用1作为默认值
其他:
coeff=int(coeflist[0])
#为字典查找分隔元素名称
滤芯=过滤器(λc:非c.isdigit(),滤芯带系数)
打印系数,元素
#用系数计算
元素=系数*原子元素[元素]
wt_list.append(元素wt)
打印“%sg”%sum(工作列表)

注意:我不是化学专业的学生,因此请确保计算摩尔质量id的逻辑正确与否。

谢谢!那太完美了。帮助很大:)