Создать список с числами в Python
Не могу додуматься, как создать список в python следующего содержания: 1,2,3,4,5,6,7,8,9,11,22,33,44,55,66,77,88,99...и т.д. вплоть до 10^18-1.
Код-то я, конечно, сделал, но он довольно громоздкий. Хочу спросить, есть ли способ как-то его оптимизировать, чтобы было проще довести до 10^18-1
chis = list(range(l,r+1))
chis2 = list(range(1,10))
i = 1
j = 0
for j in range(9):
for i in range(9):
i += 1
if 10**(j-1) == 1:
chis2.append(i*10**j+i)
elif 10**(j-1) == 10:
chis2.append(i*10**j+i*10**(j-1)+i)
elif 10**(j-1) == 100:
chis2.append(i*10**j+i*10**(j-1)+i*10**(j-2)+i)
elif 10**(j-1) == 1000:
chis2.append(i*10**j+i*10**(j-1)+i*10**(j-2)+i*10**(j-3)+i)
elif 10**(j-1) == 10000:
chis2.append(i*10**j+i*10**(j-1)+i*10**(j-2)+i*10**(j-3)+i*10**(j-4)+i)
Вывод:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 111, 222, 333, 444, 555, 666, 777, 888, 999, 1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 9999, 11111, 22222, 33333, 44444, 55555, 66666, 77777, 88888, 99999, 111111, 222222, 333333, 444444, 555555, 666666, 777777, 888888, 999999]
Ответы (2 шт):
Автор решения: Алексей Р
→ Ссылка
Решение с генератором
def gen(max):
x = 1 # x принимает значения 1 - 11 - 111 и так далее
while True:
for i in range(1, 10):
out = x * i
if out > max:
return # выходим при превышении max
yield out # выдаем очередное значение
x = x * 10 + 1 # вычисляем следующее базовое число
lst = [i for i in gen(10 ** 18 - 1)]
print(lst)
Автор решения: Oopss
→ Ссылка
print([int(''.join([str(j)] * i)) for i in range(1, 18) for j in range(1, 10)])
@Stanislav Volodarskiy поправил меня, так лучше:
print([int(str(j) * i)) for i in range(1, 18) for j in range(1, 10)])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 111, 222, 333, 444, 555, 666, 777, 888, 999, 1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 9999, 11111, 22222, 33333, 44444, 55555, 66666, 77777, 88888, 99999, 111111, 222222, 333333, 444444, 555555, 666666, 777777, 888888, 999999, 1111111, 2222222, 3333333, 4444444, 5555555, 6666666, 7777777, 8888888, 9999999, 11111111, 22222222, 33333333, 44444444, 55555555, 66666666, 77777777, 88888888, 99999999, 111111111, 222222222, 333333333, 444444444, 555555555, 666666666, 777777777, 888888888, 999999999, 1111111111, 2222222222, 3333333333, 4444444444, 5555555555, 6666666666, 7777777777, 8888888888, 9999999999, 11111111111, 22222222222, 33333333333, 44444444444, 55555555555, 66666666666, 77777777777, 88888888888, 99999999999, 111111111111, 222222222222, 333333333333, 444444444444, 555555555555, 666666666666, 777777777777, 888888888888, 999999999999, 1111111111111, 2222222222222, 3333333333333, 4444444444444, 5555555555555, 6666666666666, 7777777777777, 8888888888888, 9999999999999, 11111111111111, 22222222222222, 33333333333333, 44444444444444, 55555555555555, 66666666666666, 77777777777777, 88888888888888, 99999999999999, 111111111111111, 222222222222222, 333333333333333, 444444444444444, 555555555555555, 666666666666666, 777777777777777, 888888888888888, 999999999999999, 1111111111111111, 2222222222222222, 3333333333333333, 4444444444444444, 5555555555555555, 6666666666666666, 7777777777777777, 8888888888888888, 9999999999999999, 11111111111111111, 22222222222222222, 33333333333333333, 44444444444444444, 55555555555555555, 66666666666666666, 77777777777777777, 88888888888888888, 99999999999999999]