Из переменной надо разбить цифры в разные переменные

В прогу попадает длинное число, мне нужно что бы каждая цифра из данной переменной ушла в свою переменную. Например в коде ниже число '1561108032002' то есть в переменную a1 попадет '111' и тд. Думаю это можно сделать как-то через списки, но не могу допереть. Буду очень благодарен если поможете .

a = 1561108032002
a1 = ''
a2 = ''
a3 = ''
a4 = ''
a5 = ''
a6 = ''
a7 = ''
a8 = ''
a9 = ''

for i in list(str(a)):
    if i == '1':
        a1 += i
    elif i == '2':
        a2 += i
    elif i == '3':
        a3 += i
    elif i == '4':
        a4 += i
    elif i == '5':
        a5 += i
    elif i == '6':
        a6 += i
    elif i == '7':
        a7 += i
    elif i == '8':
        a8 += i
    elif i == '9':
        a9 += i
print(a1, a2, a3, a4, a5, a6, a7, a8, a9)
#Вывод: 111 22 3  5 6  8 

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

Автор решения: GameLinux
spisok = []
a = 1561108032002
b = str(a)
for i in range(len(b)):
    spisok.append(b[i])
spisok = list(set(spisok))
for i in range(len(spisok)):
    print(spisok[i])
→ Ссылка
Автор решения: Nannik

Всегда, когда у вас возникает желание использовать много переменных, отдайте предпочтение массивам

В этом алгоритме в словарь в ключи добавляются уникальные числа, а к значению конкатенируется это же число. После чего значения словаря преобразуется в список

num = 1561108032002;

dict = {};
for n in str(num):
    try:
        dict[n] += n;
    except:
        dict[n] = n;

result = list(dict.values());

print(result);
→ Ссылка
Автор решения: Сергей

Вместо десяти не очень удобных переменных используем список, как вы и хотели (хотя можно и в них переписать из списка в самом конце). Каждое число окажется в ячейке со своим номером. Поясняющие комментарии даны по тексту.

Вариант 1 (основной) - использует факт, что нули не надо считать (в примере вывода в вопросе нули не выводятся). Со строками вообще не работаем -только с числами.

a = 1561108032002
# Заполняем список нулями изначально
counters = [0]*10
# Уменьшаем число на одну цифру за каждый проход по циклу, пока не станет число нулем
while a:
    # Получаем последнюю цифру делением по модулю
    digit = a % 10
    # Уменьшаем число на последнюю цифру целочисленным делением
    a = a // 10
    # Увеличиваем цифру на 10 и добавляем ещё одну цифру
    counters[digit] = counters[digit] * 10 + digit
# Печатаем получившиеся числа, если они не равны 0
for i in range (10):
    if counters[i]:
        print (counters[i], end =' ')

Вариант 2 (запасной) - на случай, если надо и нули сосчитать. Разница с основным: список заполняем пустыми строками, а не нулями, сохраняем цифры в виде символов в списке, печатаем всё.

a = 1561108032002
# Заполняем список пустыми строками изначально
counters = [''] * 10
# Уменьшаем число на одну цифру за каждый проход по циклу, пока не станет число нулем
while a:
    # Получаем последнюю цифру делением по модулю
    digit = a % 10
    # Уменьшаем число на последнюю цифру целочисленным делением
    a = a // 10
    # Добавляем ещё одну цифру
    counters[digit] = counters[digit] + str(digit)
# Печатаем все получившиеся строки
for i in range (10):
    print (counters[i], end =' ')
→ Ссылка
Автор решения: Evrik

Ещё один вариант на основе списков

a = 1561108032002

nums = [''] * 10
for val in str(a):
     nums[int(val)] += val
print(''.join(nums))  # 0000111223568
→ Ссылка
Автор решения: NickName11

Если именно с переменными, то можно через словарь:

a = 124419149

vars = {'1': '', '2': '', '3': '', '4': '', '5': '', '6': '', '7': '', '8': '', '9': ''}

for i in str(a):
    vars[i] += i
    
a1, a2, a3, a4, a5, a6, a7, a8, a9 = vars.values()

print(a1)
print(a9)
print(a4)

# вывод: 111
# 99
# 444
→ Ссылка
Автор решения: Stanislav Volodarskiy

Перевести в строку, отсортировать, собрать в группы, группы собрать в строки:

import itertools

n = 1561108032002
a = [''.join(g) for _, g in itertools.groupby(sorted(str(n)))]
print(a)
['0000', '111', '22', '3', '5', '6', '8']

Если вы хотите учесть так же отсутствующие цифры, то решение немного другое, в чём-то даже проще:

n = 1561108032002
s = str(n)
a = [d * s.count(d) for d in '0123456789']
print(a)
['0000', '111', '22', '3', '', '5', '6', '', '8', '']

Если вас беспокоят десять проходов по строке, то можно в один проход. Хотя лично предпочитаю предыдущий более компактный код:

n = 1561108032002
counters = [0] * 10
for d in str(n):
    counters[int(d)] += 1
a = [str(d) * c for d, c in enumerate(counters)]
print(a)
['0000', '111', '22', '3', '', '5', '6', '', '8', '']

Для подсчёта элементов контейнера создан collections.Counter:

import collections

n = 1561108032002
c = collections.Counter(str(n))
a = [d * c[d] for d in '0123456789']
print(a)
['0000', '111', '22', '3', '', '5', '6', '', '8', '']

С ним же версия без нулевых счётчиков:

import collections

n = 1561108032002
a = sorted(d * c for d, c in collections.Counter(str(n)).items())
print(a)
['0000', '111', '22', '3', '5', '6', '8']
→ Ссылка