繁体   English   中英

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

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

Pythonlen内置函数仅限于系统的整数长度。 所以,就我而言,它仅限于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 中的一个错误。 至少对于课程,您可以替换

连(c)

c.__len__()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM