我有一个来自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]
)建立一个list
的int
从一个序列s int
-able物体,如小数字符串中row
.外部列表comprehension([... for row in T1])
)构建一个应用于每个项目的内部列表理解结果的列表T1
.
如果任何行包含无法转换的对象,则代码段将失败int
.如果要处理包含非十进制字符串的行,则需要更智能的函数.
如果您知道行的结构,则可以通过调用行的函数来替换内部列表推导.例如.
T2 = [parse_a_row_of_T1(row) for row in T1]
我宁愿只使用理解列表:
[[int(y) for y in x] for x in T1]
而不是put int( )
,put float( )
会让你使用小数和整数.
到目前为止,我同意每个人的答案,但问题是,如果你没有所有整数,他们会崩溃.
如果你想排除非整数那么
T1 = (('13', '17', '18', '21', '32'), ('07', '11', '13', '14', '28'), ('01', '05', '06', '08', '15', '16')) new_list = list(list(int(a) for a in b) for b in T1 if a.isdigit())
这只产生实际数字.我不使用直接列表推导的原因是因为列表理解泄漏了它们的内部变量.
T3=[] for i in range(0,len(T1)): T3.append([]) for j in range(0,len(T1[i])): b=int(T1[i][j]) T3[i].append(b) print T3
试试这个.
x = "1"
x是一个字符串,因为它有引号,但它有一个数字.
x = int(x)
由于x中的数字为1,我可以将其转换为整数.
要查看字符串是否为数字,您可以执行此操作.
def is_number(var): try: if var == int(var): return True except Exception: return False x = "1" y = "test" x_test = is_number(x) print(x_test)
它应该打印到IDLE True,因为x是一个数字.
y_test = is_number(y) print(y_test)
它应打印到IDLE False,因为y不是数字.