如何解决Python中len函数的局限性?

时间:2019-09-03 23:49:50

标签: python python-3.x cpython

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

2 个答案:

答案 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__()