当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中将字符串转换为整数?

如何解决《如何在Python中将字符串转换为整数?》经验,为你挑选了7个好方法。

我有一个来自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但没有得到任何体面的结果.



1> unwind..:

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 = map(lambda lol:map(int,lol),T1)`?无论是地图还是列表理解,都是愚蠢的;)
@flyingsheep双地图对我来说似乎很傻,这看起来很好.

2> Will Harris..:

您可以使用列表解析来执行此操作:

T2 = [[int(column) for column in row] for row in T1]

内部列表理解([int(column) for column in row])建立一个listint从一个序列s int-able物体,如小数字符串中row.外部列表comprehension([... for row in T1]))构建一个应用于每个项目的内部列表理解结果的列表T1.

如果任何行包含无法转换的对象,则代码段将失败int.如果要处理包含非十进制字符串的行,则需要更智能的函数.

如果您知道行的结构,则可以通过调用行的函数来替换内部列表推导.例如.

T2 = [parse_a_row_of_T1(row) for row in T1]



3> odwl..:

我宁愿只使用理解列表:

[[int(y) for y in x] for x in T1]



4> 小智..:

而不是put int( ),put float( )会让你使用小数和整数.


您能解释一下答案的更多细节吗?

5> Christian Wi..:

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

如果你想排除非整数那么

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

这只产生实际数字.我不使用直接列表推导的原因是因为列表理解泄漏了它们的内部变量.


“ isdigit”比较棘手,请在“ -1”上尝试。int(<str>)是通过try / except进行检查的方法。

6> 小智..:
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


欢迎来到Stack Overflow!请解释为什么此代码解决了所提出的问题,而不是仅发布一段代码.没有解释,这不是答案.

7> 小智..:

试试这个.

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不是数字.


你的is_number函数是错误的.'1'不等于1.这不是Perl.:-P
不要重新发明轮子,使用`x.isnumeric()`.
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有