len
中的Python
内置函数仅限于系统的整数长度。因此,就我而言,它仅限于sys.maxsize
,即 2147483647 。但是,考虑到Python3
的无限制整数,我认为此限制会造成挫败感。是否有任何解决方法可以克服此限制?例如,我想要得到这样的长度:
range(3, 100000000000000000000, 3)
但这是
len(range(3, 100000000000000000000, 3))
返回此错误:
OverflowError: Python int too large to convert to C ssize_t
答案 0 :(得分:2)
除非您计划拥有大量具有大量容量的可懒惰迭代的类型,否则可以对range
进行特殊情况并自己做数学:
def robustish_len(c):
try:
return len(c)
except OverflowError:
return (c.stop - c.start + c.step - 1) // c.step
或者,或者:
def robust_len(c):
try:
return len(c)
except OverflowError:
return float('inf') # close enough :)
答案 1 :(得分:-1)
这似乎是 Python 中的一个错误。至少对于类,你可以替换
<块引用>len(c)
与
<块引用>c.__len__()