koddla

Yazılımcıları bilgi ile güçlendirir.

Python’da dizeyi sıfırla doldurma

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

Dize biçimlendirme belgeleri.


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.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top