簡體   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