我什至不知道我的问题到底出在这个错误上。任何信息将非常有帮助。

我到目前为止所拥有的:

def equations(specie,elements):
vectors=[]
for x in specie:
    vector=extracting_columns(x,elements)
    vectors.append(vector)


当我跑步时:

 equations(['OH', 'CO2','c3o3','H2O3','CO','C3H1'],
 ['H', 'C', 'O'])


我收到以下错误:

    Traceback (most recent call last):
File "<stdin>", line 1, in <module>


文件“ _sage_input_77.py”,第10行,在
    exec compile(u'print support.syseval(python,u“ equations([\'OH \',\'CO2 \',\'c3o3 \',\'H2O3 \',\'CO \',\'C3H1 \'],unel)“,SAGE_TMP_DIR)
  文件“”,第1行,位于

syseval中的文件“ /sagenb/sage_install/sage-5.4-sage.math.washington.edu-x86_64-Linux/devel/sagenb-git/sagenb/misc/support.py”,行479
    返回system.eval(cmd,sage_globals,locals = sage_globals)
  文件“ /sagenb/sage_install/sage-5.4-sage.math.washington.edu-x86_64-Linux/local/lib/python2.7/site-packages/sage/misc/python.py”,第56行,以eval开头
    评估(z,全球)
  文件“”,第1行,位于

等式中的文件“”,第4行

文件“”,第3行,位于extracting_columns中

ValueError:需要多个值才能解压

我以前的功能(如果需要):
汇入
def parse_formula(公式):
    给出一个简单的化学公式,返回一个(元素,多重性)元组列表。

Example:
'H2SO4' --> [('H', 2.0), ('S', 1.0), ('O', 4.0)]


'''

return [ (elem, float(mul) if mul else 1.) for (elem, mul) in re.findall(r'([A-Z][a-z]*)(\d*)', formula) ]


def unique_element(group):
    c = []
    对于组中的元素:
        piece = parse_formula(element)
        对于x片:
            c.append(x [0])

return list(set(c))


def extracting_columns(种类,元素):
    species_vector = zeros(len(elements))
    对于(el,mul)种:
        species_vector [elements.index(el)] = mul

return species_vector

最佳答案

问题是您要使用像extracting_columns这样的字符串作为第一个参数调用'OH',因此当您尝试执行for (el,mul) in specie:时,它试图将'O'拆包为(el, mul)

一种简单的调试方法是在有问题的行之前插入print

def extracting_columns(specie, elements):
  species_vector=zeros(len(elements))
  print(specie)
  for (el,mul) in specie:
    species_vector[elements.index(el)]=mul
  return species_vector


那么,extracting_columns如何获得'OH'?好吧,让我们看看它的调用位置,还有另外两个print

def equations(specie,elements):
  vectors=[]
  print(specie)
  for x in specie:
    print(x)
    vector=extracting_columns(x,elements)
    vectors.append(vector)


现在,当您运行它时,您会看到specie['OH', 'CO2', 'c3o3', 'H2O3', 'CO', 'C3H1'],因此它的第一个元素显然是'OH'

至于如何解决此问题……好吧,在不知道您实际要做什么的情况下,很难告诉您如何做。但是很显然,如果您想遍历extracting_columns的第一个参数并将每个项目视为一对,则必须将其传递成对的序列而不是字符串。

但是,看来您的parse_formula是专门为将像'OH'这样的字符串转换为像[('O', 1.0), ('H', 1.0)]这样的对的列表而设计的。因此,大概的问题是您忘记了在某个地方调用它。也许您想equations看起来像这样?

def equations(specie, elements):
  vectors=[]
  for x in specie:
    formula = parse_formula(x)
    vector=extracting_columns(formula, elements)
    vectors.append(vector)


这样做毫无例外。无论是您真正想要的,我都不知道。

无论如何,学习如何查看代码中实际发生的情况以及调试琐碎的问题可能比在此处立即获得正确答案更为重要。

10-08 09:28