Utilizator anonim
Mai mult
Mai frumos mod de a pad zerouri la un șir
Ceea ce este cel mai Pythonic mod de a pad numeric șir cu zerouri la stânga, adică, atât numeric șir are o anumită lungime?
1288
14
Siruri de caractere:
Și pentru numere:
Șir de formatare documentația.
Doar folosi rjust metoda de obiect string.
Acest exemplu va face un șir de 10 caractere, umplutură după cum este necesar.
În afară de
zfill
, puteți utiliza general șir de formatare:Documentația pentru șir de formatare și f-siruri de caractere.
Acest lucru funcționează în ambele Python 2 și 3 Python:
Pentru utilizarea cu Python 3.6+ folosind f-siruri de caractere:
dacă doriți opus:
str(n).zfill(lățime)
va lucra custring
s, int i, `float... și este Python 2.x și 3.x compatibil:Pentru cei care au venit aici pentru a înțelege și nu doar un răspuns rapid.
str.zfill
este special destinat pentru a face acest lucru:Rețineți că acesta este destinat în mod special să se ocupe numerice, siruri de caractere cum a solicitat, și se mută un " + " sau " - " la începutul șirului:
Aici's a ajuta pe str.zfill`:
De performanță
Acest lucru este, de asemenea, cele mai performante metode alternative:
Pentru mai compara mere cu mere pentru
%
metoda (rețineți că este de fapt mai lent), care, altfel, se va pre-calcula:Punerea în aplicare
Cu un pic de sapaturi, am gasit punerea în aplicare a
zfill
metoda dinObiecte/stringlib/transmogrify.h
:Las's de mers pe jos prin acest cod C.
Primul analizează argument pozițional, ceea ce înseamnă că nu't permite cuvinte cheie argumente:
Se verifică apoi dacă-l's de aceeași lungime sau mai mult, caz în care se returnează șirul.
zfill
telefoanepad
(astapad
funcția este, de asemenea, numit deeu
,rjust
, și "centru", la fel de bine). Acest fapt copiază conținutul într-un nou șir și umple padding.După apelarea
pad
,zfill
se mișcă în orice inițial precedente " + " sau " - " la începutul șirului.Rețineți că pentru șirul inițial pentru a fi de fapt numerică nu este necesară:
Vezi de imprimare a documentației pentru toate detaliile interesante!
Actualizare pentru Python 3.x (7,5 ani mai târziu)
Ultima linie ar trebui să fie acum:
I. e.
print()
este acum o funcție, nu o declarație. Rețineți că eu încă prefer Old School `printf () "stil" pentru că, IMNSHO, se citește mai bine, și pentru că am'am fost folosind această notație din ianuarie, 1980. Ceva ... câinii bătrâni .. ceva ceva ... trucuri noi.Atunci când se utilizează Python
>= 3.6
, cel mai curat mod este de a utiliza f-siruri de caractere cu șir de caractere format caietul de sarcini:Pentru zip coduri memorate ca numere întregi:
Sincronizare rapid comparație:
Am'am facut diferite teste de diferite repetiții. Diferențele nu sunt foarte mari, dar in toate testele, `zfill soluție a fost mai rapid.
O altă abordare ar fi de a utiliza o listă de înțelegere cu condiția de verificare pentru lungimi. Mai jos este o demonstratie:
Ai putea repeta, de asemenea, "0", adauga-l la `str(n) și obține din dreapta latime felie. Rapid și murdar pic de exprimare.