如何解决 Python 中 `len` 函数的限制?

How to work around the limitation of `len` function in Python?

len Python 中的内置函数限制为系统的整数长度。因此,就我而言,它仅限于 sys.maxsize,即 2147483647。然而,鉴于 Python3 的无限整数,我认为这种限制令人沮丧。是否有任何解决方法来克服此限制?例如,我想得到这个的长度:

range(3, 100000000000000000000, 3)

但是这个:

len(range(3, 100000000000000000000, 3))

returns 这个错误:

OverflowError: Python int too large to convert to C ssize_t

除非你计划拥有大量具有巨大容量的惰性可迭代类型,否则你可以特例 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  :)

这似乎是 Python 中的错误。至少 类,你可以替换

len(c)

c.__len__()