Więcej
Jak przekonwertować ciągi znaków na liczby całkowite w Pythonie?
Mam krotkę krotek z zapytania MySQL w następujący sposób:
T1 = (('13', '17', '18', '21', '32'),
('07', '11', '13', '14', '28'),
('01', '05', '06', '08', '15', '16'))
I'would like to convert all the string elements into integers and put them back into a list of lists:
T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
Próbowałem to osiągnąć za pomocą eval
, ale nie uzyskałem jeszcze żadnego przyzwoitego wyniku.
424
3
int()
jest standardową wbudowaną funkcją Pythona służącą do konwersji łańcucha znaków na wartość całkowitą. Wywołujesz ją z łańcuchem zawierającym liczbę jako argument, a ona zwraca liczbę przekonwertowaną na liczbę całkowitą:Powyższy wynik to
2
.Jeśli znasz strukturę swojej listy, T1 (że po prostu zawiera listy, tylko jeden poziom), możesz to zrobić w Pythonie 2:
W Pythonie 3:
Możesz to zrobić za pomocą zrozumienia listy:
The inner list comprehension (
[int(column) for column in row]
) builds alist
ofint
s from a sequence ofint
-able objects, like decimal strings, inrow
. The outer list comprehension ([... for row in T1])
) buduje listę wyników wewnętrznego list comprehension zastosowanych do każdego elementu wT1
.Ten fragment kodu nie powiedzie się, jeśli któryś z wierszy będzie zawierał obiekty, które nie mogą być konwertowane przez
int
. Jeśli chcesz przetwarzać wiersze zawierające łańcuchy niedziesiętne, będziesz potrzebował bardziej inteligentnej funkcji.Jeśli znasz strukturę wierszy, możesz zastąpić wewnętrzne zrozumienie listy wywołaniem funkcji dla danego wiersza. Na przykład.
Jeśli to'tylko tuple tupli, coś jak
rows=[map(int, row) for row in rows]
zrobi sztuczkę. (Tam jest lista comprehension i wywołanie map(f, lst), które jest równe [f(a) for a in lst]).Eval jest nie tym, co chcesz zrobić, na wypadek, gdyby w twojej bazie danych z jakiegoś powodu było coś takiego jak
__import__("os").unlink("importantsystemfile")
. Zawsze sprawdzaj poprawność swoich danych wejściowych (jeśli nie ma nic innego, wyjątek int() podniesie się, jeśli masz złe dane wejściowe).