0

现在我的功能没有将列表 coeff 中的数字识别为数字。我正在尝试将两个列表中的项目配对,然后根据 mul 的值将它们排序到不同的列表中。但一切都进入负面清单。我如何确保将 mul 视为进入每个 if 语句的数字。

def balance_equation(species,coeff):
  data=zip(coeff,species)
  positive=[]
  negative=[]
  for (mul,el) in data:
    if mul<0:
        negative.append((el,mul))
    if mul>0:
        positive.append((el,mul))

编辑; 我要最初包括这个 balance_equation(['H2O','A2'],['6','-4'])

4

3 回答 3

1

嗯,第一个问题是你的函数只是返回None,只是扔掉了两个列表,所以甚至没有办法看到它是否在做正确的事情。

如果你解决了这个问题,你会发现它正在做正确的事情。

def balance_equation(species,coeff):
  data=zip(coeff,species)
  positive=[]
  negative=[]
  for (mul,el) in data:
    if mul<0:
        negative.append((el,mul))
    if mul>0:
        positive.append((el,mul))
  return negative, positive

>>> n, p = balance_equation(balance_equation('abcdef', range(-3,3))
>>> n
[('a', -3), ('b', -2), ('c', -1)]
>>> p
[('e', 1), ('f', 2)]

所以,有两种可能:

  1. 由于您粘贴的代码显然不是您正在运行的实际代码,因此您可能在重写该错误以将其发布到此处时修复了该错误。
  2. 你不是用合理的输入来调用它。例如,如果你向后传递参数,因为species可能是字符串的集合,它们最终都会是正数。或者,同样,如果您将系数作为整数的字符串表示形式传递。

如果这是最后一个问题——你正在传递,比如说,'abcdef', ['-3', '-2', '-1', '0', '1', '2', '3']并且你想在 balance_equation 中而不是在调用代码中处理它,那很容易。只需在以下内容之前添加此行zip

coeff = [int(x) for x in coeff]

或更改zip为:

data = zip((int(x) for x in coeff), species)

顺便说一句,我假设您使用的是 CPython 2。在 Python 3 中,尝试将字符串与 0 进行比较会引发 aTypeError而不是总是返回True,而在其他 Python 2 实现中它可能总是返回False而不是True......</p >

于 2012-12-18T19:44:30.710 回答
1

你的问题是,在你称之为(balance_equation(['H2O','A2'],['6','-4']))的方式中,它mul是一个字符串而不是一个 int('6''-4'而不是6-4)。将您的 if 语句更改为:

if int(mul)<0:
    negative.append((el,mul))
if int(mul)>0:
    positive.append((el,mul))

mul在将其与 0 比较之前转换为整数。

于 2012-12-18T19:52:12.097 回答
0

我想你有你的答案,但在 Python 中还有一种更简单的方法:

for (mul, el) in data:
    append_to = negative.append if mul < 0 else positive.append
    append_to(el)

0虽然不确定“应该发生”什么

于 2012-12-18T19:50:18.733 回答