强制变量为整数

时间:2010-07-20 17:37:08

标签: python

errors = int(0)
for i in range(len(expectedData)):
    if data[i] != expectedData[i]:
        errors += int(binary_compare(data[i], expectedData[i]))
return errors

我有上面的代码,我试图用它来计算某些数据的某个整数(错误数)。我已经把我可以看到的所有东西都变成了整数,但是行“errors + = ...”仍然附加了值,而不是添加它。

例如,如果我的答案应该是7,那么我可能会得到500002.(5 + 0 + 0 + .. + 2)。我以前从未遇到过这种情况。函数binary_compare也返回一个整数,但我完全不知道为什么这不起作用。

2 个答案:

答案 0 :(得分:3)

python不是javascript

当你从count += value开始count = 0时,无法获得连接字符串而不是数学和。如果您尝试将字符串添加到整数,则会引发异常:

>>> x = 0
>>> x += "1"
TypeError: unsupported operand type(s) for +=: 'int' and 'str'

比较你不知道它们是字符串还是整数的值,我会使用

str(data[i]).strip() == str(expectedData[i]).strip()

对于非整数数学和,您可能想要做类似这样的事情

try:
    value = int(expectedData[i])
except:
    value = 0
count += value

答案 1 :(得分:2)

我认为错误不在您的代码之内,但无论如何,在Python中,列表操作很少用循环来完成,因为这侧重于实现而非目的。列表理解,生成器等是首选,并且还有许多用于常见任务的内置和标准库函数。

在你的情况下,我会将函数写为

return sum(binary_compare(x, y) for x, y in zip(data, expectedData) if x != y)

如果您使用的是Python 2.x,则应使用itertools.izip代替zip