Kā pārvērst virknes veselos skaitļos programmā Python?

No MySQL vaicājuma man ir šāda tuple ar tuplēm:

T1 = (('13', '17', '18', '21', '32'),
      ('07', '11', '13', '14', '28'),
      ('01', '05', '06', '08', '15', '16'))

Es gribētu pārvērst visus virknes elementus veselos skaitļos un ievietot tos atpakaļ sarakstu sarakstā:

T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]

Es mēģināju to panākt ar eval, bet pagaidām neesmu guvis pienācīgu rezultātu.

Risinājums

int() ir Python standarta iebūvētā funkcija, lai pārvērstu virkni veselos skaitļos. To izsauc, kā argumentu norādot virkni ar skaitli, un tā atgriež skaitli, kas pārvērsts veselā skaitlī:

print (int("1") + 1)

Iepriekš redzamais izraksta 2.

Ja jūs zināt sava saraksta T1 struktūru (ka tas vienkārši satur sarakstus, tikai vienā līmenī), jūs varētu to izdarīt Python 2:

T2 = [map(int, x) for x in T1]

Python 3:

T2 = [list(map(int, x)) for x in T1]
Komentāri (2)

To var izdarīt, izmantojot saraksta izpratni:

T2 = [[int(column) for column in row] for row in T1]

Iekšējā saraksta izpratne ([int(column) for column in row]) veido int sarakstu no secības int iespējamu objektu, piemēram, decimālzīmju virknes, secības rinda. Ārējā saraksta izpratne ([... for row in T1])) veido sarakstu, kurā ir iekšējās saraksta izpratnes rezultāti, kas piemēroti katram elementam T1.

Koda fragments neizdosies, ja kādā no rindām būs objekti, kurus nevar konvertēt ar int. Ja vēlaties apstrādāt rindas, kurās ir virknes, kas nav decimālskaitļi, jums būs vajadzīga gudrāka funkcija.

Ja jūs zināt rindu struktūru, jūs varat aizstāt iekšējā saraksta izpratni ar rindas funkcijas izsaukumu. Piem.

T2 = [parse_a_row_of_T1(row) for row in T1]
Komentāri (0)

Ja tas ir tikai tuple no tuplēm, tad kaut kas līdzīgs rows=[map(int, row) for row in rows] veiks šo triku. (Tur ir saraksta izpratne un izsaukums map(f, lst), kas ir vienāds ar [f(a) for a in lst].)

Eval ir _ne tas, ko jūs vēlaties darīt, ja jūsu datu bāzē kaut kādu iemeslu dēļ ir kaut kas līdzīgs __import__("os").unlink("importantsystemfile"). Vienmēr pārbaudiet ievades datus (ja nekas cits neatliks, tad, ja ievades dati ir slikti, tiks parādīts izņēmums int()).

Komentāri (0)