如何将列表中的所有字符串转换为整数?

我有一个包含字符串的元组的元组:

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]]

相关:

1690882 次浏览

int()是Python标准内置函数,用于将字符串转换为整数值。你用一个包含数字作为参数的字符串来调用它,它会返回转换成整数的数字:

>>> int("1") + 1
2

如果你知道你的列表T1的结构(它只是包含列表,只有一个级别),你可以在Python 3中这样做:

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

在Python 2中:

T2 = [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对象序列(如row中的十进制字符串)构建__abc2的list。外部列表推导式([... 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()将引发)

使用列表推导式:

t2 = [map(int, list(l)) for l in t1]

到目前为止,我同意每个人的答案,但问题是,如果你没有所有的整数,它们会崩溃。

如果你想排除非整数

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())

这只会产生实际的数字。我不使用直接的列表推导式的原因是列表推导式泄露了它们的内部变量。

只使用列表推导式:

[[int(y) for y in x] for x in T1]
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

不要放int( ),而是放float( ),这样可以同时使用小数和整数。

试试这个。

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不是一个数字。

在Python 3.5.1中,类似这样的工作:

c = input('Enter number:')
print (int(float(c)))
print (round(float(c)))

而且

Enter number:  4.7
4
5

Python 2的另一个函数解决方案:

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)

看这个函数

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:'

你可以这样做:

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 if a.isdigit()) for b in T1)
print(new_list)

我想分享一个可用的选项,但这里似乎还没有提到:

rumpy.random.permutation(x)

将生成数组x的随机排列。不是你要求的完全,但它是类似问题的潜在解决方案。

Python内置了函数int(string)和可选参数基。

如果你的字符串包含一个Integer值,它会将其转换为相应的Integer值。 然而,如果你有小数作为字符串,你将需要float()来转换它

用法:

a = '22'
b = int(a)

而且

if a = '22.22'
b = int(a) '''will give error, invalid literal for int().'''
b = float(a) '''will convert the string.'''