Viac na
Ako previesť reťazce na celé čísla v jazyku Python?
Z dotazu MySQL mám takýto tuple tuplov:
T1 = (('13', '17', '18', '21', '32'),
('07', '11', '13', '14', '28'),
('01', '05', '06', '08', '15', '16'))
Chcel by som previesť všetky reťazcové prvky na celé čísla a vrátiť ich späť do zoznamu zoznamov:
T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
Snažil som sa to dosiahnuť pomocou eval
, ale zatiaľ som nedostal žiadny slušný výsledok.
424
3
int()
je štandardná vstavaná funkcia jazyka Python na prevod reťazca na celočíselnú hodnotu. Zavoláte ju s reťazcom obsahujúcim číslo ako argument a funkcia vráti číslo prevedené na celé číslo:Vyššie uvedené číslo vypíše
2
.Ak poznáte štruktúru vášho zoznamu T1 (že jednoducho obsahuje zoznamy, len na jednej úrovni), môžete to urobiť v Pythone 2:
V Pythone 3:
Môžete to urobiť pomocou porozumenia zoznamu:
Vnútorné chápanie zoznamu (
[int(stĺpec) pre stĺpec v riadku]
) vytvorílist
intov
zo sekvencie objektov, ktoré možno chápať akoint
, napríklad desatinné reťazce, vriadku
. Vonkajšie chápanie zoznamu ([... for row in T1])
) vytvorí zoznam výsledkov chápania vnútorného zoznamu aplikovaného na každú položku vT1
.Úryvok kódu zlyhá, ak niektorý z riadkov obsahuje objekty, ktoré sa nedajú konvertovať pomocou
int
. Ak chcete spracovať riadky obsahujúce nedecimálne reťazce, budete potrebovať inteligentnejšiu funkciu.Ak poznáte štruktúru riadkov, môžete vnútorné chápanie zoznamu nahradiť volaním funkcie daného riadku. Napr.
Ak ide len o tuple tuplov, postačí niečo ako
rows=[map(int, row) for row in rows]
. (Je tam pochopenie zoznamu a volanie map(f, lst), ktoré sa rovná [f(a) pre a v lst].)Eval nie je to, čo chcete urobiť, v prípade, že vo vašej databáze je z nejakého dôvodu niečo ako
__import__("os").unlink("importantsystemfile")
. Vždy overujte vstup (ak ničím iným, výnimka int() sa vyvolá, ak máte zlý vstup).