Rohkem
Kuidas teisendada stringid täisarvudeks Pythonis?
Mul on MySQL-i päringust saadud tupel sellisel kujul:
T1 = (('13', '17', '18', '21', '32'),
('07', '11', '13', '14', '28'),
('01', '05', '06', '08', '15', '16'))
Ma'tahaksin teisendada kõik stringi elemendid täisarvudeks ja panna need tagasi loetelusse:
T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
Proovisin seda saavutada eval
iga, kuid ei'saanud veel korralikku tulemust.
424
3
int()
on Pythoni standardne sisseehitatud funktsioon stringi teisendamiseks täisarvuks. Te kutsute seda funktsiooniga, mille argumendiks on arvu sisaldav string, ja see tagastab täisarvuks teisendatud arvu:Ülaltoodud funktsioon prindib
2
.Kui te teate oma loendi T1 struktuuri (et see sisaldab lihtsalt loendeid, ainult üks tase), siis võiksite seda teha Python 2-s:
Python 3-s:
Seda saab teha nimekirja mõistmisega:
Sisemine loendi mõistmine (
[int(column) for column in row]
) koostabrivis
intolevate
int-objektide, näiteks kümnendsõnade, jadast
rivis. Väline loendi mõistmine (
[.... for row in T1])) moodustab loendi sisemise loendi mõistmise tulemustest, mida rakendatakse iga elemendi suhtes loendis
T1`.Koodilõik ebaõnnestub, kui mõni rida sisaldab objekte, mida ei saa teisendada
int
abil. Te'vajate targemat funktsiooni, kui soovite töödelda ridu, mis sisaldavad mitte-detsimaalseid stringisid.Kui te teate ridade struktuuri, võite asendada sisemise loendi mõistmise funktsiooni kutsega rea funktsioonile. Nt.
Kui see on ainult tupel tupelidest, siis midagi sellist nagu
rows=[map(int, row) for row in rows]
teeb seda. (Seal'on loendi mõistmine ja kõne map(f, lst), mis on võrdne [f(a) for a in lst], seal sees).Eval on ei see, mida sa tahad teha, juhul kui sinu andmebaasis on mingil põhjusel midagi sellist nagu
__import__("os").unlink("importantsystemfile")
. Valideeri alati oma sisend (kui midagi muud ei ole, siis tõstab erand int(), kui sul on vale sisend).