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

标签 python python-3.x cpython

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

range(3, 100000000000000000000, 3)

但是这个:

len(range(3, 100000000000000000000, 3))

返回此错误:

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 - 如何解决 Python 中 `len` 函数的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57779889/

相关文章:

python - 使用 tensorflow 估计器进行训练和验证

python - 从 IronPython 使用 NumPy 和 SciPy 的 final方法

python - 为什么 Python zipfile 不提供与命令行 zip 相同的输出 .zip 文件大小?

python - 通过 sys.set_trace 访问 Python 解释器的数据栈

python - 具有连接列的 Pandas 数据框

python-3.x - 找不到已解决的包

python - 迈克尔·道森的问答游戏作业

python - 如何在列表中实现选择排序?

python - 从CPython文档澄清 “it should be possible to change the value of 1”

python-3.x - 如何创建元组的循环引用?