Aşağıdaki içerikler, örnek kodla birlikte, Python’da dizelerin (str) listelerinin (dizilerinin) ve sayı listelerinin (int, float) birbirine nasıl dönüştürüleceğini açıklar.
- Bir sayı listesini bir dizi listesine dönüştürün
- Bir sayıyı ondalık dizgeye dönüştürün
- Sayısal değerleri ikili, sekizli ve onaltılı dizelere dönüştürür
- Sayısal bir değeri üstel gösterimde bir dizgeye dönüştürür
- Bir dizi listesini bir sayı listesine dönüştürün
- Ondalık dizgiyi sayısala dönüştür
- İkili, sekizli ve onaltılı dizeleri sayılara dönüştürür
- Üstel gösterimdeki dizeleri sayısal değerlere dönüştürür
- Yalnızca sayılara dönüştürülebilen dizeleri dönüştürün
Bir listeden yeni bir liste oluştururken, liste kavrayışlarını yazmak for döngülerinden daha kolaydır. Bu makaledeki örnek kod, liste kavramalarını da kullanır. Liste kavrayışlarının ayrıntıları için aşağıdaki makaleye bakın.
Listelerin farklı veri türlerini depolayabileceğini ve dizilerden kesinlikle farklı olduğunu unutmayın. Aşağıdaki durumlarda dizi (standart kitaplık) veya NumPy kullanın.
- Bellek boyutu ve bellek adresleri gerektiren işlemleri ele almak istiyorum.
- Büyük veri kümelerinin vb. sayısal olarak işlenmesi için dizileri işlemek istiyorsunuz.
Bir sayı listesini bir dizi listesine dönüştürün
Bir sayıyı ondalık dizgeye dönüştürün
Sayısaldan dizgeye dönüştürmek için str() kullanın.
Python’da sayılar, üstel, onaltılık ve ikili (onaltılık ve ikili gösterim) dahil olmak üzere çeşitli biçimlerde ifade edilebilir. str() dönüşümü, normal ondalık gösterimde bir dizeyle sonuçlanır.
Basamak sayısına bağlı olarak, üstel gösterim otomatik olarak kullanılabilir.
l_n = [-0.5, 0, 1.0, 100, 1.2e-2, 0xff, 0b11]
l_n_str = [str(n) for n in l_n]
print(l_n_str)
# ['-0.5', '0', '1.0', '100', '0.012', '255', '3']
Sayısal değerleri ikili, sekizli ve onaltılı dizelere dönüştürür
İkili, sekizli veya onaltılı (ikili gösterim, sekizli gösterim veya onaltılık gösterim) dizelerine dönüştürmek için aşağıdaki yöntemler kullanılabilir.
bin()
oct()
hex()
format()
str.format()
format() fonksiyonu ile sıfırları doldurmak ve rakamları ayarlamak mümkündür.
l_i = [0, 64, 128, 192, 256]
l_i_hex1 = [hex(i) for i in l_i]
print(l_i_hex1)
# ['0x0', '0x40', '0x80', '0xc0', '0x100']
l_i_hex2 = [format(i, '04x') for i in l_i]
print(l_i_hex2)
# ['0000', '0040', '0080', '00c0', '0100']
l_i_hex3 = [format(i, '#06x') for i in l_i]
print(l_i_hex3)
# ['0x0000', '0x0040', '0x0080', '0x00c0', '0x0100']
Sayısal bir değeri üstel gösterimde bir dizgeye dönüştürür
Yukarıda bahsedildiği gibi, bazı durumlar basamak sayısına bağlı olarak otomatik olarak üstel gösterimde olabilir. Ancak, her zaman üstel gösterimde bir dizgeye dönüştürmek için aşağıdakilerden birini kullanın.
format()
str.format()
format() işlevi ve str.format() dize yöntemi hakkında daha fazla bilgi için aşağıdaki makaleye bakın.
Mantis bölümünün basamak sayısı belirtilebilir. Argüman olarak büyük E harfi kullanılırsa, çıktı dizesi de büyük E harfidir.
l_f = [0.0001, 123.456, 123400000]
l_f_e1 = [format(f, 'e') for f in l_f]
print(l_f_e1)
# ['1.000000e-04', '1.234560e+02', '1.234000e+08']
l_f_e2 = [format(f, '.3E') for f in l_f]
print(l_f_e2)
# ['1.000E-04', '1.235E+02', '1.234E+08']
Bir dizi listesini bir sayı listesine dönüştürün
Ondalık dizgiyi sayısala dönüştür
Dizeden sayıya dönüştürmek için int() veya float() kullanın.
int() bir tamsayıya dönüştürmedir ve float() bir kayan noktalı sayıya dönüştürmedir.
float()’ta, tamsayı kısmı çıkarılmış olan dizeler, tamsayı kısmı için 0 ile tamamlanır.
l_si = ['-10', '0', '100']
l_si_i = [int(s) for s in l_si]
print(l_si_i)
# [-10, 0, 100]
l_sf = ['.123', '1.23', '123']
l_sf_f = [float(s) for s in l_sf]
print(l_sf_f)
# [0.123, 1.23, 123.0]
İkili, sekizli ve onaltılı dizeleri sayılara dönüştürür
int() öğesinin ikinci argümanı bir sayı tabanı olabilir: ikili için 2, sekizlik için 8 ve onaltılık için 16, bir dizeyi sayıya dönüştürür.
0 belirtilirse, aşağıdaki önek dizilerinin her biri bir tam sayıya dönüştürülür.
0b
- ikili rakamlar
0o
- sekizli
0x
- onaltılık
l_sb = ['0011', '0101', '1111']
l_sb_i = [int(s, 2) for s in l_sb]
print(l_sb_i)
# [3, 5, 15]
l_sbox = ['100', '0b100', '0o77', '0xff']
l_sbox_i = [int(s, 0) for s in l_sbox]
print(l_sbox_i)
# [100, 4, 63, 255]
Üstel gösterimdeki dizeleri sayısal değerlere dönüştürür
Üstel gösterimdeki dizeler, özel bir belirtime gerek kalmadan doğrudan float() ile dönüştürülebilir.
l_se = ['1.23e3', '0.123e-1', '123']
l_se_f = [float(s) for s in l_se]
print(l_se_f)
# [1230.0, 0.0123, 123.0]
Yalnızca sayılara dönüştürülebilen dizeleri dönüştürün
Sayıya dönüştürülemeyen bir dizeyi int() veya float() işlevine iletmek, ValueError ile sonuçlanır.
Hata durumunda false döndüren yeni bir işlev tanımlanırsa, yalnızca dönüştürülebilen öğeler sayılara dönüştürülebilir ve listenin öğeleri olabilir.
def is_int(s):
try:
int(s)
except ValueError:
return False
else:
return True
def is_float(s):
try:
float(s)
except ValueError:
return False
else:
return True
l_multi = ['-100', '100', '1.23', '1.23e2', 'one']
l_multi_i = [int(s) for s in l_multi if is_int(s)]
print(l_multi_i)
# [-100, 100]
l_multi_f = [float(s) for s in l_multi if is_float(s)]
print(l_multi_f)
# [-100.0, 100.0, 1.23, 123.0]