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

not*_*las 3 python integer long-integer

x = [1, 2, 3, ... ]
y = sum(x)
Run Code Online (Sandbox Code Playgroud)

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

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

这是我的导入列表:

import math, csv, sys, re, time, datetime, pickle, os, gzip
from numpy import *
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 14

二十个quatloos说你正在使用numpy和函数:

>>> sum(xrange(10**7))
49999995000000L
>>> from numpy import sum
>>> sum(xrange(10**7))
-2014260032
Run Code Online (Sandbox Code Playgroud)

所以我敢打赌你做过from numpy import *或正在使用一些相同的界面.

要验证这一点,请尝试

print type(sum(x))
Run Code Online (Sandbox Code Playgroud)

在此线程中其他位置发布的示例:

>>> sum([721832253, 721832254, 721832254])
-2129470535
>>> type(sum([721832253, 721832254, 721832254]))
<type 'numpy.int32'>
Run Code Online (Sandbox Code Playgroud)

编辑:有人欠我二十个quatloos!要么不使用星级导入(最好),请手动设置dtype:

>>> sum([721832253, 721832254, 721832254],dtype=object)
2165496761L
Run Code Online (Sandbox Code Playgroud)

或者sum明确地引用内置(可能给它一个更方便的绑定):

>>> __builtins__.sum([721832253, 721832254, 721832254])
2165496761L
Run Code Online (Sandbox Code Playgroud)