Wenn ich eine Zeichenfolge mit der Länge L = 77 habe, die ich auf eine Länge auffüllen möchte, die ein Vielfaches von N = 10 ist. Ich bin daran interessiert, nur die erforderliche Polsterung zu berechnen. Dies kann leicht mit N - (L % N) durchgeführt werden, außer in Fällen, in denen L % N Null ist.

Ich habe vorerst Folgendes verwendet:

pad = (N - (L % N)) % N

Dies scheint nicht besonders lesbar zu sein, deshalb benutze ich es manchmal

pad = N - (L % N)
if pad == N:
    pad = 0

Es scheint übertrieben, drei Codezeilen für etwas so Einfaches zu verwenden.

Alternativ kann ich das k finden, für das k * N >= L, aber die Verwendung von math.ceil scheint auch ein Overkill zu sein.

Gibt es eine bessere Alternative, die mir fehlt? Vielleicht irgendwo eine einfache Funktion?

3
Mad Physicist 18 Apr. 2018 im 18:14

5 Antworten

Beste Antwort

Der Modul des negativen L wird es tun.

pad = -L % N
3
Bert Kellerman 21 Nov. 2019 im 14:38

Mit 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
1
Thierry Lathuille 18 Apr. 2018 im 15:25

Ist das nicht genug?

pad = (N - L) % N
2
Austin 18 Apr. 2018 im 15:38

Ich meine, kannst du das nicht einfach tun?

pad = N-L if N-L > 0 else 0
0
Grant Williams 18 Apr. 2018 im 15:20

Verwenden Sie den Tenary Conditional Operator:

0 if (L % N) == 0 else N - (L % N) 
0
naroslife 18 Apr. 2018 im 15:39