сортировка списка с первым не ноль

Нужна сортировка списка 4 чисел так, чтобы исключить первое число, если есть ноль. Например 4251 получить 1245. А если 2001 то получить 1002, а не 0012. Пока так получилось

abcd = int(input())
a = []
a.append(abcd // 1000)
a.append((abcd % 1000) // 100)
a.append((abcd % 100) // 10)
a.append(abcd % 10)
print(*sorted(a), sep='')

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

Автор решения: gil9red

Накидал такой алгоритм:

  • Получаем число как строку
  • Собираем список символов-цифр, исключая 0 и сортируем
  • Подсчитываем количество нулей
  • Если нулей были, то вставляем их после второй цифры

Пример:

abcd = input()
digits = sorted(c for c in abcd if c != '0')
zeros = len(abcd) - len(digits)
if zeros:
    digits.insert(1, '0' * zeros)

print(*digits, sep='')
→ Ссылка
Автор решения: CrazyElf

Я так до конца и не понял задачу, но если нужно, например, оставить нули на своих местах, а остальные цифры отсортировать, то будет примерно так:

a = list(input())
b = [x for x in a if x != '0']
b.sort()
j = 0
for i, x in enumerate(a):
    if x != '0':
       a[i] = b[j]
       j += 1
print(*a, sep='')
→ Ссылка
Автор решения: GrAnd
  • Сортируем цифры как строку (слева оказываются нули если они были)
  • Переводим в int (обрезаются нули слева) и обратно в str.
  • Берём левую цифру и к ней приклеиваем оставшиеся предварительно дополнив их нулями слева (если надо)
a = 2001
s = str(int("".join(sorted(str(a)))))
b = int(s[0] + s[1:].zfill(3))
print(b)
→ Ссылка