【问题标题】:Simple way to calculate padding based on modulo/remainder基于模数/余数计算填充的简单方法
【发布时间】:2018-09-28 21:48:55
【问题描述】:

如果我有一个长度为 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 似乎也有点过头了。

有没有更好的选择我错过了?也许某个地方有一个简单的功能?

【问题讨论】:

  • N - L还不够吗?
  • @MegaIng。抱歉,不清楚。更新了问题。
  • 为什么不为此使用字符串格式选项?
  • @alec_djinn。因为我们谈论的是字符串这一事实是无关紧要的。就此而言,有哪些字符串格式化选项?
  • @MadPhysicist 感谢您的澄清。检查stackoverflow.com/questions/20309255/… 使用字符串格式的填充解决方案

标签: python padding modulo


【解决方案1】:

我的意思是你不能简单地做

pad = N-L if N-L > 0 else 0

【讨论】:

  • 抱歉,我的问题不清楚。我更新了它。我想在最终长度需要是N 的任意倍数的情况下找到填充,我不知道倍数。不幸的是,我基本上使您的答案无效。我很抱歉。
  • 另外,我反对计算两次非零差异的情况,这将这个解决方案减少为使用让我不开心的if 语句。
  • 很公平。如果你愿意,你也可以使用pad = max(N-L, 0)。虽然我无法想象额外的减法会那么重要
【解决方案2】:

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

【讨论】:

  • 这似乎并不比取模两次简单,但可能更容易理解。
【解决方案3】:

负L的模就可以了。

pad = -L % N

【讨论】:

    【解决方案4】:

    这还不够吗?

    pad = (N - L) % N
    

    【讨论】:

    • 这实际上减少了接受的答案。聪明。
    【解决方案5】:

    使用tenary conditional operator

    0 if (L % N) == 0 else N - (L % N) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      相关资源
      最近更新 更多