Как оптимизовать код при 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 шт):
Если Вам нужно подсчитать количество девяток, тогда не нужно сохранять весь диапазон ненужных цифр в памяти. Можно брать по одной цифре и анализировать ее. После того как проанализировали выбрасывать и так до конца диапазона цифр.
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))