Python’da binlik ayırıcı olarak virgül nasıl kullanılır?

Diyelim ki 1234567 sayısını 1,234,567 şeklinde yazdırmak istiyoruz.

Diyelim ki 1234567 sayısını 1,234,567 şeklinde yazdırmak istiyoruz. Bunu nasıl başaracağız? Aslında bunun için birden çok yöntemimiz var:

Local modülü ile

import locale
locale.setlocale(locale.LC_ALL, '')  # otomatik kullanım için '' olarak bırakın. ya da 'en_US.UTF-8' gibi bir formata zorlayabilirsiniz.

'{:n}'.format(value)  # Python ≥2.7
f'{value:n}'  # Python ≥3.6

Local modülü olmadan

'{:,}'.format(value)  #  Python ≥2.7
f'{value:,}'  # Python ≥3.6

Yine local modülü kullanmadan deneyebileceğimiz bir yol da aşağıdaki:

def intWithCommas(x):
    if type(x) not in [type(0), type(0L)]:
        raise TypeError("Parametre tam sayı olmalı")
    if x < 0:
        return '-' + intWithCommas(-x)
    result = ''
    while x >= 1000:
        x, r = divmod(x, 1000)
        result = ",%03d%s" % (r, result)
    return "%d%s" % (x, result)

regex

Tek satırlık bir regex ile de aynı işlemi yapabiliriz:

re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1,", "%d" % val)

Yalnızca tamsayı çıktıları için aşağıdaki kullanılabilir:

import re
val = 1234567890
re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1,", "%d" % val)
# Çıktı: '1,234,567,890'

val = 1234567890.1234567890
# Çıktı: '1,234,567,890'

Veya 4 basamaktan az olan floatlar için biçim belirleyicisini %.3f şekilde değiştirebiliriz:

re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1,", "%.3f" % val)
# Çıktı: '1,234,567,890.123'

Not: Ondalıklı sayıları da gruplandırmaya çalışacağından üçten fazla basamakta bu çözüm düzgün çalışmayacaktır:

re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1,", "%.5f" % val)
# çıktı: '1,234,567,890.12,346'

Regex nasıl çalışır?

Hadi bu regexi parçalayalım:

re.sub(desen, repl, string)

pattern = \
    "(\d)           # bir sayı bul...
     (?=            # arkasından gelen...
         (\d{3})+   # bir veya daha fazla üçlü grup içeren...
         (?!\d)     # ama sonrasında sayı gelmeyen.
     )",

repl = \
    r"\1,",         # bu bir sayıyı kendisi ve sonrasında gelen bir virgül ile değiştir,
                    # sonra daha fazla eşleşme için aramaya devam et
                    # (re.sub() tüm eşleşmeleri değiştirir)

string = \
    "%d" % val      # dizeyi ondalık olarak düzenle

Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Yazı, Python

Okumaya devam et!

Temel Matematik Operatörleri

Python, tamsayı ve float bölme, çarpma, üs alma, toplama ve çıkarma dahil olmak üzere yaygın matematiksel işlemlerini başka bir modüle ihtiyaç duymadan yapabilir.

Python101 – Mantık İfadeleri (Boolean)

Bir örnekle başlayalım (yazmanız gerekmiyor): Bu kodun çıktısı aşağıdaki gibi: Ne oldu? Yukarıdaki program bir sürü komik görünümlü print ifadesinden oluşuyor.

Python ile neler yapılabilir? – 7 Neden

Python, 2003 yılından bu yana TIOBE Programlama Topluluğu Endeksi’nde sürekli olarak en popüler on programlama dili arasında yer alıyor.

Python’da listenin son öğesi nasıl elde edilir?

Python’da, listenin son öğesini nasıl alırsınız? En kısa ve en Pythonik yolu some_list[-1] şeklindedir.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.