我有一个来自MySQL查询的图元,像这样的图元。
T1 = (('13', '17', '18', '21', '32'),
('07', '11', '13', '14', '28'),
('01', '05', '06', '08', '15', '16'))
我想把所有的字符串元素转换为整数,并把它们放回一个列表中。
T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
我试图用eval
来实现,但还没有得到任何像样的结果。
int()
是Python的标准内置函数,用于将一个字符串转换成整数值。你用一个包含数字的字符串作为参数来调用它,然后它返回转换为整数的数字。
print (int("1") + 1)
上面打印的是2
。
如果你知道你的列表的结构,T1 (即它只是包含列表,只有一层),你可以在 Python 2 中这样做。
T2 = [map(int, x) for x in T1]
在 Python 3 中。
T2 = [list(map(int, x)) for x in T1]
你可以用列表理解法来做这件事。
T2 = [[int(column) for column in row] for row in T1]
内层列表理解([int(column) for column in row]
)从row
中的一连串int
可执行对象,如十进制字符串,建立一个int
的列表
。外部列表理解([... for row in T1])
)建立了一个内部列表理解结果的列表,应用于T1
中的每一项。
如果任何行包含不能被int
转换的对象,该代码片段将失败。如果你想处理包含非十进制字符串的行,你将需要一个更聪明的函数。
如果你知道行的结构,你可以用调用行的函数来代替内部列表的理解。例如。
T2 = [parse_a_row_of_T1(row) for row in T1]
如果它只是一个元组的元组,像rows=[map(int, row) for row in rows]
这样的东西就可以了。(这里面有一个列表理解和对map(f, lst)的调用,等于[f(a) for a in lst])。
Eval不是你想做的,万一在你的数据库中由于某种原因有类似`import("os").unlink("importantsystemfile")'的东西。 始终验证你的输入(如果没有其他东西,如果你有坏的输入,int()会引发异常)。