Bir MySQL sorgusundan aşağıdaki gibi bir tuple'ım var:
T1 = (('13', '17', '18', '21', '32'),
('07', '11', '13', '14', '28'),
('01', '05', '06', '08', '15', '16'))
Tüm dize öğelerini tamsayılara dönüştürmek ve bunları bir liste listesine geri koymak istiyorum:
T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
Bunu eval
ile başarmaya çalıştım ama henüz iyi bir sonuç alamadım.
int()
, bir dizeyi tamsayı değerine dönüştürmek için kullanılan Python standart yerleşik işlevidir. Argüman olarak bir sayı içeren bir karakter dizisi ile çağırırsınız ve tamsayıya dönüştürülmüş sayıyı döndürür:
print (int("1") + 1)
Yukarıdaki 2
yazdırır.
Eğer listenizin yapısını biliyorsanız, T1 (sadece listeler içeriyor, sadece bir seviye), bunu Python 2'de yapabilirsiniz:
T2 = [map(int, x) for x in T1]
Python 3'te:
T2 = [list(map(int, x)) for x in T1]
Bunu bir liste anlayışı ile yapabilirsiniz:
T2 = [[int(column) for column in row] for row in T1]
İç liste kavrayışı ([int(column) for column in row]
), row
içinde ondalık dizeler gibi int
-able nesneler dizisinden int
lerden oluşan bir list
oluşturur. Dış liste kavrayışı ([... for row in T1])
) T1
içindeki her öğeye uygulanan iç liste kavrayışının sonuçlarının bir listesini oluşturur.
Satırlardan herhangi biri int
ile dönüştürülemeyen nesneler içeriyorsa kod parçacığı başarısız olacaktır. Ondalık olmayan dizeler içeren satırları işlemek istiyorsanız daha akıllı bir işleve ihtiyacınız olacaktır.
Satırların yapısını biliyorsanız, iç liste kavramasını satırın bir işlevine yapılan bir çağrı ile değiştirebilirsiniz. Örn.
T2 = [parse_a_row_of_T1(row) for row in T1]
Eğer sadece bir tuple tuple ise, rows=[map(int, row) for row in rows]
gibi bir şey işinizi görecektir. (Burada bir liste anlama ve [f(a) for a in lst]'ye eşit olan map(f, lst) çağrısı vardır).
Veritabanınızda herhangi bir nedenle __import__("os").unlink("importantsystemfile")
gibi bir şey olması durumunda, eval yapmak istediğiniz şey değildir.
Her zaman girdinizi doğrulayın (başka hiçbir şey yoksa, int() istisnası kötü girdiniz varsa yükselecektir).