Есть ли в Python способ получить len с типом данных int, а не с целым числом размером индекса?Python

Программы на Python
Ответить
Anonymous
 Есть ли в Python способ получить len с типом данных int, а не с целым числом размером индекса?

Сообщение Anonymous »

Я работаю над кодом, в котором необходимы большие целые числа, вот его упрощенная версия (

Код: Выделить всё

len_class.py
):

Код: Выделить всё

class BigLen():
def __len__(self):
return 10**100
Однако я столкнулся со следующей проблемой:

Код: Выделить всё

>>> from len_class import BigLen
>>> len(BigLen())
Traceback (most recent call last):
File "", line 1, in 
OverflowError: cannot fit 'int' into an index-sized integer
Обратите внимание, что я не собираюсь сохранять в памяти какой-либо огромный массив, а скорее выполняю математические вычисления и возвращаю результат в виде int Python для функции __len__.
Чтобы внести большую ясность в мой вариант использования и обосновать этот вопрос. Это для реализации ленивой последовательности. Возьмем, к примеру, набор четных чисел от 0 до 10*100-1. Мы можем установить функциональную связь между индексами; 0, 1, 2, 3, ..., 10**100-1 и соответствующие четы; 0, 2, 4, 6, ..., 2*(10**100-1). Если i является индексом, то функция f(i)=2*i устанавливает связь. Это можно использовать для реализации ленивой последовательности, когда в памяти почти ничего не хранится, но любой элемент доступен. Если e является объектом Evens, то len(e) == 10*100 , len(e[1:]) == 10**100-1 , len(e[:2]) == 2 и т. д. И e[3] == 6 , e[10] == 20, e[10**100-1] == 2*(10 **100-1) и т. д. Среди других свойств, но без дополнительных подробностей, поскольку это отводит в сторону основную суть.
Есть ли обходной путь для этой проблемы? Можно ли привести это целое число индексного размера к произвольному размеру python int?
Сам проект, по сути, представляет собой реализацию ленивой последовательности, поэтому нет намерения хранить много данных в памяти. Лучше всего использовать __len__. Я использую Python 3.12.3.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ex-sized-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»