Список фрагментов, равный последней цифре

Я работаю над школьным проектом, и для этого я пытаюсь нарезать строку, равную последней цифре строки, мне нужно убедиться, что каждый срез имеет длину, равную последней цифре, если она не равна длине тогда мне нужно добавить конечные нули

Пример: "132567093" должно быть ['132', '567', '090']Когда я пытаюсь, я получаю ['132', '567', '09']

Это пока код, который я имею

n = input()
int_n = int(n)
num=int(n)
lastdigit=num%10
s = n[:-1]
print([s[idx:idx+lastdigit] for idx,val in enumerate(s) if idx%lastdigit 
== 0])

2 ответа

Решение

Еще один способ сделать это - использовать zip идиома кластеризации со значением заполнения

from itertools import zip_longest as zipl

*digits, length = '132567093'

length = int(length)

print([''.join(t) for t in zipl(*[iter(digits)]*length, fillvalue='0')])
# ['132', '567', '090']

# To sum them together
print(sum(int(''.join(t)) for t in zipl(*[iter(digits)]*length, fillvalue='0')))
# 789

Вы также можете использовать форматирование строки:

s='132567093'
length = int(s[-1])
digits = s[:-1]
format_str = "{{:0<{}}}".format(length) # {:0<3}
print([format_str.format(digits[i:i+length]) for i in range(0, len(digits), length)])
# ['132', '567', '090']
print(sum(int(format_str.format(digits[i:i+length])) for i in range(0, len(digits), length)))
# 789

Для нуля слева есть str.zfill метод.

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

print([s[idx:idx+lastdigit][::-1].zfill(lastdigit)[::-1] for idx,val in enumerate(s) if idx%lastdigit== 0])

выходы:

['132', '567', '090']

без zfill Вы можете вычислить количество символов для добавления. Формула уродлива, но она быстрее, потому что она не создает 3 строки в процессе:

[s[idx:idx+lastdigit]+"0"*(max(0,lastdigit-len(s)+idx)) for idx,val in enumerate(s) if idx%lastdigit== 0]
Другие вопросы по тегам