如何将string转换为Python中的整数?
我有这样一个MySQL查询的元组的元组:
T1 = (('13', '17', '18', '21', '32'), ('07', '11', '13', '14', '28'), ('01', '05', '06', '08', '15', '16')) 我想将所有的string元素转换为整数,并把它们放回列表中:
 T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]] 
 我试图用eval来实现,但没有得到任何体面的结果呢。 
  int()是Python标准内置函数,用于将string转换为整数值。 你用一个包含一个数字的string作为参数来调用它,它将返回转换为一个实际整数的数字: 
 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] )根据int -able对象序列(如十进制string) [int(column) for column in row]构build一个int list 。 外部列表理解( [... for row in T1]) )构build了应用于T1每个项目的内部列表理解的结果的列表。 
 如果任何行包含无法通过int转换的对象,则代码片段将失败。 如果要处理包含非十进制string的行,则需要更智能的函数。 
如果您知道行的结构,则可以使用对该行的函数的调用来replace内部列表理解。 例如。
 T2 = [parse_a_row_of_T1(row) for row in T1] 
我宁愿只使用理解列表:
 [[int(y) for y in x] for x in T1] 
 而不是把int( ) ,把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()) 
这只产生实际的数字。 我不使用直接列表理解的原因是因为列表理解泄漏了他们的内部variables。
 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 
使用列表parsing:
 t2 = [map(int, list(l)) for l in t1] 
尝试这个。
 x = "1" 
x是一个string,因为它有引号,但它有一个数字。
 x = int(x) 
由于x的数字是1,所以我可以把它变成一个整数。
要查看一个string是否是一个数字,可以这样做。
 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不是一个数字。
在Python 3.5.1中,像这样的工作:
 c = input('Enter number:') print (int(float(c))) print (round(float(c))) 
和
 Enter number: 4.7 4 5 
乔治。
Python 2的另一个function解决scheme:
 from functools import partial map(partial(map, int), T1) 
Python 3会有点混乱:
 list(map(list, map(partial(map, int), T1))) 
我们可以用一个包装来解决这个问题
 def oldmap(f, iterable): return list(map(f, iterable)) oldmap(partial(oldmap, int), T1) 
 如果它只是一个元组的元组, rows=[map(int, row) for row in rows]就像rows=[map(int, row) for row in rows] 。  (有一个列表理解和一个调用映射(f,lst),这里面等于[f(a))。 
  Eval 不是你想要做的,以防某些原因导致数据库中出现类似__import__("os").unlink("importantsystemfile")情况。 总是validation你的input(如果没有别的,如果input错误,则会抛出exceptionint())。 
看到这个function
 def parse_int(s): try: res = int(eval(str(s))) if type(res) == int: return res except: return 
然后
 val = parse_int('10') # Return 10 val = parse_int('0') # Return 0 val = parse_int('10.5') # Return 10 val = parse_int('0.0') # Return 0 val = parse_int('Ten') # Return None 
你也可以检查
 if val == None: # True if input value can not be converted pass # Note: Don't use 'if not val:' 
 for str in T2 : return num(str) 
也许这个工作