Sayısal dizenin belirli bir uzunluğa sahip olması için, sayısal bir dizeyi solda sıfırlarla doldurmanın en pythonik yolu nedir?
str.zfill
özellikle bunu yapmak için tasarlanmış:
>>> '1'.zfill(4)
'0001'
Bu metodun özellikle sayısal dizeleri işlemek için tasarlandığını unutmayın. Dolayısıyla + ve – işaretlerini dizenin başına taşıyacaktır:
>>> '+1'.zfill(4)
'+001'
>>> '-1'.zfill(4)
'-001'
Yardım fonksiyonunu çağırdığımızda da aşağıdaki açıklamayı göreceğiz:
>>> help(str.zfill)
Help on method_descriptor:
zfill(...)
S.zfill(width) -> str
Pad a numeric string S with zeros on the left, to fill a field
of the specified width. The string S is never truncated.
Biçimlendirme ile dizenin soluna sıfır ekleme
Diğer bir yöntem biçimlendirme formatını kullanmak:
>>> n = 4
>>> print(f'{n:03}') # python >= 3.6
004
>>> print('%03d' % n)
004
>>> print(format(n, '03')) # python >= 2.6
004
>>> print('{0:03d}'.format(n)) # python >= 2.6 + python 3
004
>>> print('{foo:03d}'.format(foo=n)) # python >= 2.6 + python 3
004
>>> print('{:03d}'.format(n)) # python >= 2.7 + python3
004
rjust()
string nesnesinin rjust yöntemini kullanarak da aynı işiş yapabiliriz.
Bu örnek 10 karakter uzunluğunda bir dize yapacaktır.
>>> t = 'test'
>>> t.rjust(10, '0')
>>> '000000test'
Performans
Peki performans açısından hangi yöntem daha etkili?
>>> min(timeit.repeat(lambda: '1'.zfill(4)))
0.18824880896136165
>>> min(timeit.repeat(lambda: '1'.rjust(4, '0')))
0.2104538488201797
>>> min(timeit.repeat(lambda: f'{1:04}'))
0.32585487607866526
>>> min(timeit.repeat(lambda: '{:04}'.format(1)))
0.34988890308886766
Görüldüğü gibi zfill() aralarında performans açısından en etkilisi.