列出等于最后一位的切片
list slices equal to the last digit
我正在做一个学校项目,为此,我试图将字符串切片等于字符串的最后一位数字,我需要确保每个切片的长度与最后一位数字相等,如果它的长度不相等,那么我需要添加尾随零
示例:“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])
要在左侧补零,有一个 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]
另一种方法是使用 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
我正在做一个学校项目,为此,我试图将字符串切片等于字符串的最后一位数字,我需要确保每个切片的长度与最后一位数字相等,如果它的长度不相等,那么我需要添加尾随零
示例:“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])
要在左侧补零,有一个 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]
另一种方法是使用 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