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)
| 归档时间: |
|
| 查看次数: |
3672 次 |
| 最近记录: |