Почему max () и min () не работают эффективно для объектов диапазона в Python 3? - PullRequest
2 голосов
/ 05 марта 2019

Поскольку этот популярный вопрос объясняет, range объекты в Python 3 достаточно умны, чтобы иметь возможность эффективно проверять членство:

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

Однако это не относится к оценке максимальных и минимальных значений range с max и min, которая, кажется, выполняет итерацию по всей последовательности, чтобы найти эти значения:

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

Было бы тривиально эффективно реализовать эти функции для range объектов, так почему же это не было сделано? Есть ли какие-то детали реализации или крайний случай, которого мне не хватает?

1 Ответ

2 голосов
/ 05 марта 2019

max принимает последовательность как дано, не делая предположений о типе. Последовательность просто повторяется за время O (n), независимо от того, является ли это range объектом, списком или генератором.

Некоторые другие операторы и функции откладывают более сложные методы, которые затем вычисляют результат. В случае range, in вызывает метод __contains__ dunder, который затем вычисляет, будет ли low <= item < high, в основном. Так что это O (1) в Python3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...