Python sum()返回负值,因为该和对于32位整数来说太大

Python sum()返回负值,因为该和对于32位整数来说太大,python,integer,long-integer,Python,Integer,Long Integer,x的和为2165496761,大于32位整数的限制 因此sum(x)返回-2129470535 如何通过将其转换为长整数来获得正确的值 这是我的进口清单: x = [1, 2, 3, ... ] y = sum(x) Python以任意精度处理大量数据: import math, csv, sys, re, time, datetime, pickle, os, gzip from numpy import * 总结一下 要确保您不使用numpy.sum,请尝试使用\uuuuu内置函数\uu

x
的和为2165496761,大于32位整数的限制 因此
sum(x)
返回-2129470535

如何通过将其转换为长整数来获得正确的值

这是我的进口清单:

x = [1, 2, 3, ... ]
y = sum(x)

Python以任意精度处理大量数据:

import math, csv, sys, re, time, datetime, pickle, os, gzip
from numpy import *
总结一下


要确保您不使用
numpy.sum
,请尝试使用
\uuuuu内置函数\uuuuuuuuu.sum()

Twenty quatloos表示您正在使用
numpy
的求和函数:

>>> sum([721832253, 721832254, 721832254])
2165496761
所以我敢打赌你是从numpy import*中下载的
,或者你正在使用一些与之类似的接口

要验证这一点,请尝试

>>> sum(xrange(10**7))
49999995000000L
>>> from numpy import sum
>>> sum(xrange(10**7))
-2014260032
在本帖其他地方发布的示例中:

print type(sum(x))
或者明确地参考内置的
sum
(可能给它一个更方便的绑定):


获取此无效值的原因是在
int32
上使用了
np.sum
。没有任何东西阻止您使用
np.int32
而不是
np.int64
np.int128
数据类型来表示数据。例如,你可以使用

>>> __builtins__.sum([721832253, 721832254, 721832254])
2165496761L

另一方面,请确保您从不使用numpy import*
中的
。这是一种可怕的习惯,你必须尽快改掉。当您使用来自的
时。。。导入*
,您可能会覆盖一些Python内置代码,这使得调试非常困难。典型的例子是,您对函数的覆盖,如
sum
max

Python可以处理任意大的数字;你的代码是什么?x=[1,2,…]是一个很长的整数列表,加起来是2165496761。还有另一个不使用
import*
…@notilas不,
import*
的原因!你曾经被它咬过一次,现在再也不要这样做了。我的返回-2129470535。视窗64machine@notilas:那么您的
x
就不是您所期望的。Python integer支持与平台无关。我已将您的文本复制并粘贴到我的机器上。“sum([721832253,721832254,721832254]),它返回一个负值…似乎不是我们可以升级的任何quatloos计数器…这可能是一个值得改进的功能。我认为这里的问题可能适用于其他领域,例如reduce(mul,[1,2,3,4,5…])?在处理大型列表上的产品时,如何解决这一问题?
>>> sum([721832253, 721832254, 721832254],dtype=object)
2165496761L
>>> __builtins__.sum([721832253, 721832254, 721832254])
2165496761L
x.view(np.int64).sum()