Создать список с числами в 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]
→ Ссылка