список фрагментов, равный последней цифре - PullRequest
0 голосов
/ 19 декабря 2018

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

Пример: "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 ]

0 голосов
/ 19 декабря 2018

Другой способ сделать это - использовать идиому кластеризации 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
0 голосов
/ 19 декабря 2018

Для нуля слева есть метод * 1001. *:

['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]
...