Как оптимизовать код при MemoryError?

Есть такой код:

a = 565754545445
print([x for x in str(list(range(1, a + 1)))])

Если я попытаюсь его запустить, то получу:

>>> MemoryError

Знаю как исправить с помощью сторонних библиотек. Но есть ли вариант сделать это только с помощью базовых возможностей Python?

По большому счету, выводить весь этот лист не нужно. Нужно лишь узнать сколько раз в этом дипазоне встречается конкретная цифра, например 9. То есть вот так:

a = 100
print(len([i for i in str(list(range(1, a + 1))) if i == '9']))

Это работает для небольших чисел. Например, 100. Но хотелось бы понять, как сделать то же самое для огромных чисел.


Ответы (1 шт):

Автор решения: Andrei

Если Вам нужно подсчитать количество девяток, тогда не нужно сохранять весь диапазон ненужных цифр в памяти. Можно брать по одной цифре и анализировать ее. После того как проанализировали выбрасывать и так до конца диапазона цифр.

def count_number(end_num):
    count = 0
    start_num = 1
    while start_num <= end_num:
        if '9' in str(start_num):
            count += 1;
        start_num += 1
        
    return count
    
print(count_number(100))
→ Ссылка