基于 modulo/remainder 计算填充的简单方法
Simple way to calculate padding based on modulo/remainder
如果我有一个长度为 L=77 的字符串,我想将其填充为 N=10 的倍数。我有兴趣只计算所需的填充量。这可以使用 N - (L % N)
轻松完成,但 L % N
为零的情况除外。
我目前使用的是:
pad = (N - (L % N)) % N
这看起来不是特别清晰,所以有时我使用
pad = N - (L % N)
if pad == N:
pad = 0
这么简单的事情用三行代码似乎有些过分了。
或者,我可以找到 k * N >= L
对应的 k
,但使用 math.ceil
似乎也有点矫枉过正。
有没有更好的选择,我错过了?也许某处有一个简单的函数?
我的意思是你不能简单地做
pad = N-L if N-L > 0 else 0
与math.ceil
:
from math import ceil
def pad(l, n):
return n*ceil(l/n) - l
assert pad(59, 10) == 1
assert pad(60, 10) == 0
assert pad(61, 10) == 9
负L的模数就可以了
pad = -L % N
这个还不够吗?
pad = (N - L) % N
使用tenary conditional operator:
0 if (L % N) == 0 else N - (L % N)
如果我有一个长度为 L=77 的字符串,我想将其填充为 N=10 的倍数。我有兴趣只计算所需的填充量。这可以使用 N - (L % N)
轻松完成,但 L % N
为零的情况除外。
我目前使用的是:
pad = (N - (L % N)) % N
这看起来不是特别清晰,所以有时我使用
pad = N - (L % N)
if pad == N:
pad = 0
这么简单的事情用三行代码似乎有些过分了。
或者,我可以找到 k * N >= L
对应的 k
,但使用 math.ceil
似乎也有点矫枉过正。
有没有更好的选择,我错过了?也许某处有一个简单的函数?
我的意思是你不能简单地做
pad = N-L if N-L > 0 else 0
与math.ceil
:
from math import ceil
def pad(l, n):
return n*ceil(l/n) - l
assert pad(59, 10) == 1
assert pad(60, 10) == 0
assert pad(61, 10) == 9
负L的模数就可以了
pad = -L % N
这个还不够吗?
pad = (N - L) % N
使用tenary conditional operator:
0 if (L % N) == 0 else N - (L % N)