Из переменной надо разбить цифры в разные переменные
В прогу попадает длинное число, мне нужно что бы каждая цифра из данной переменной ушла в свою переменную. Например в коде ниже число '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 шт):
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])
Всегда, когда у вас возникает желание использовать много переменных, отдайте предпочтение массивам
В этом алгоритме в словарь в ключи добавляются уникальные числа, а к значению конкатенируется это же число. После чего значения словаря преобразуется в список
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 =' ')
Ещё один вариант на основе списков
a = 1561108032002
nums = [''] * 10
for val in str(a):
nums[int(val)] += val
print(''.join(nums)) # 0000111223568
Если именно с переменными, то можно через словарь:
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
Перевести в строку, отсортировать, собрать в группы, группы собрать в строки:
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']