为什么max()和min()不能有效地为Python 3中的范围对象工作?

问题描述 投票:2回答:1

正如this popular question解释的那样,Python 3中的range对象足够聪明,能够有效地测试成员资格:

In [1]: 1000000000000000 in range(1000000000000001)
Out[1]: True    # answer returned very quickly

然而,使用rangemax评估min的最大值和最小值时也是如此,这似乎遍及整个序列以找到这些值:

In [2]: max(range(1000000000000001))   # don't do this
...

range对象有效地实现这些函数是微不足道的,为什么还没有完成呢?是否有一些我遗漏的实现细节或边缘情况?

python-3.x range built-in
1个回答
2
投票

max采用给定的序列,不做任何关于类型的假设。无论是range对象,列表还是生成器,都可以在O(n)时间内简单地迭代序列。

其他一些运算符和函数遵循dunder方法,然后计算结果。在range的情况下,in__contains__ dunder方法,然后基本上计算是否low <= item < high。所以在python3中它是O(1)。

© www.soinside.com 2019 - 2024. All rights reserved.