如何在Python3中转换数据类型

来自菜鸟教程
跳转至:导航、​搜索

介绍

在 Python 中, 数据类型 用于对一种特定类型的数据进行分类,确定可以分配给该类型的值以及可以对其执行的操作。 在编程时,有时我们需要在类型之间转换值以便以不同的方式操作值。 例如,我们可能需要将数值与字符串连接起来,或者在初始化为整数值的数字中表示小数位。

本教程将指导您完成数字、字符串、元组和列表的转换,并提供示例以帮助您熟悉不同的用例。

先决条件

您应该在您的计算机或服务器上安装 Python 3 并设置编程环境。 如果您没有设置编程环境,您可以参考本地编程环境或服务器上的编程环境适合您的操作的安装和设置指南系统(Ubuntu、CentOS、Debian 等)

转换数字类型

Python中有两种数字数据类型整数浮点数或浮点数。 有时您正在处理其他人的代码,并且需要将整数转换为浮点数,反之亦然,或者您可能会发现您一直在使用整数,而您真正需要的是浮点数。 Python 具有内置方法,可让您轻松地将整数转换为浮点数和将浮点数转换为整数。

将整数转换为浮点数

Python 的方法 float() 将整数转换为浮点数。 要使用此函数,请在括号内添加一个整数:

Info: 要跟随本教程中的示例代码,请通过运行 python3 命令在本地系统上打开 Python 交互式 shell。 然后,您可以通过在 >>> 提示符后添加示例来复制、粘贴或编辑示例。


float(57)

在这种情况下,57 将被转换为 57.0

您也可以将其与变量一起使用。 让我们声明 f 等于 57,然后打印出新的浮点数:

f = 57
print(float(f))
Output57.0

通过使用 float() 函数,我们可以将整数转换为浮点数。

将浮点数转换为整数

Python 还具有将浮点数转换为整数的内置函数:int()

int() 函数的工作方式类似于 float() 函数:您可以在括号内添加一个浮点数以将其转换为整数:

int(390.8)

在这种情况下,390.8 将被转换为 390

您也可以将其与变量一起使用。 让我们声明 b 等于 125.0,并且 c 等于 390.8,然后打印出新的浮点数:

b = 125.0
c = 390.8

print(int(b))
print(int(c))
Output125
390

当使用 int() 函数将浮点数转换为整数时,Python 会切断浮点数的小数和剩余数字以创建整数。 即使我们可能希望将 390.8 向上舍入为 391,Python 也不会通过 int() 函数执行此操作。

通过除法转换的数字

在 Python 3 中,相关商在执行 除法 时从整数转换为浮点数,尽管它们不在 Python 2 中。 也就是说,当您将 5 除以 2 时,在 Python 3 中,您将得到一个浮点数作为答案 (2.5):

a = 5 / 2
print(a)
Output2.5

在 Python 2 中,由于您处理的是两个整数,因此您会收到一个整数作为答案,而不是:5 / 2 = 2。 阅读“Python 2 与 Python 3:实用注意事项”,了解有关 Python 2 和 Python 3 之间差异的更多信息。

用字符串转换

string 是一个或多个字符(字母、数字、符号)的序列。 字符串是计算机程序中一种常见的数据形式,我们可能需要经常将字符串转换为数字或将数字转换为字符串,尤其是当我们接收用户生成的数据时。

将数字转换为字符串

我们可以通过使用 str() 方法将数字转换为字符串。 我们将数字或变量传递到方法的括号中,然后该数字值将转换为字符串值。

我们先来看看整数的转换。 要将整数 12 转换为字符串值,可以将 12 传递给 str() 方法:

str(12)

在终端窗口中使用 python 命令在 Python 交互式 shell 中运行 str(12) 时,您将收到以下输出:

Output'12'

数字 12 周围的引号表示该数字不再是整数,而是现在是字符串值。

使用变量,我们可以开始看到将整数转换为字符串的实用性。 假设我们想要跟踪用户的日常编程进度,并输入他们一次编写的代码行数。 我们希望向用户显示此反馈,并将同时打印出字符串和整数值:

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + lines + " lines of code.")

当我们运行此代码时,我们会收到以下错误:

OutputTypeError: can only concatenate str (not "int") to str

我们无法在 Python 中连接字符串和整数,因此我们必须将变量 lines 转换为字符串值:

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + str(lines) + " lines of code.")

现在,当我们运行代码时,我们会收到以下输出,祝贺我们的用户取得了进展:

OutputCongratulations, Sammy! You just wrote 50 lines of code.

如果我们希望将浮点数转换为字符串而不是将整数转换为字符串,我们遵循相同的步骤和格式。 当我们将浮点数传递给 str() 方法时,将返回浮点数的字符串值。 我们可以使用浮点值本身或变量:

print(str(421.034))

f = 5524.53
print(str(f))
Output421.034
5524.53

我们可以通过连接一个字符串来测试以确保它是正确的:

f = 5524.53
print("Sammy has " + str(f) + " points.")
OutputSammy has 5524.53 points.

我们可以确定我们的浮点数已正确转换为字符串,因为连接执行时没有错误。

将字符串转换为数字

可以使用 int()float() 方法将字符串转换为数字。

如果您的字符串没有小数位,您很可能希望使用 int() 方法将其转换为整数。

让我们使用用户 Sammy 跟踪每天编写的代码行的示例。 我们可能想用数学来操作这些值,以便为用户提供更有趣的反馈,但这些值当前存储在字符串中:

lines_yesterday = "50"
lines_today = "108"

lines_more = lines_today - lines_yesterday

print(lines_more)
OutputTypeError: unsupported operand type(s) for -: 'str' and 'str'

因为这两个数值存储在字符串中,所以我们收到了一个错误。 用于减法的操作数 - 不是两个字符串值的有效操作数。

让我们修改代码以包含将字符串转换为整数的 int() 方法,并允许我们对这些最初是字符串的值进行数学运算。

lines_yesterday = "50"
lines_today = "108"

lines_more = int(lines_today) - int(lines_yesterday)

print(lines_more)
Output58

变量 lines_more 自动为整数,在本例中等于数值 58。

我们还可以使用 float() 方法代替 int() 方法将上面示例中的数字转换为浮点值。 我们将接收 58.0 的输出,而不是接收 58 的输出,一个浮点数。

用户 Sammy 正在以十进制值获得积分

total_points = "5524.53"
new_points = "45.30"

new_total_points = total_points + new_points

print(new_total_points)
Output5524.5345.30

在这种情况下,将 + 操作数与两个字符串一起使用是有效的操作,但它是连接两个字符串,而不是将两个数值相加。 因此,我们的输出看起来不寻常,因为它只是将两个值放在一起。

在使用 float() 方法执行任何数学运算之前,我们希望将这些字符串转换为浮点数:

total_points = "5524.53"
new_points = "45.30"

new_total_points = float(total_points) + float(new_points)

print(new_total_points)
Output5569.83

现在我们已经将两个字符串转换为浮点数,我们收到了将 45.30 添加到 5524.53 的预期结果。

如果我们尝试将带小数位的字符串值转换为整数,我们将收到错误消息:

f = "54.23"
print(int(f))
OutputValueError: invalid literal for int() with base 10: '54.23'

如果我们将字符串中的十进制值传递给 int() 方法,我们将收到一个错误,因为它不会转换为整数。

将字符串转换为数字使我们能够快速修改我们正在使用的数据类型,以便我们可以对最初转换为字符串的数值执行操作。

转换为元组和列表

您可以使用方法 list()tuple() 将传递给它们的值分别转换为列表和元组数据类型。 在 Python 中:

  • list 是一个可变的有序元素序列,包含在方括号 [ ] 中。
  • tuple 是包含在括号 ( ) 中的元素的不可变有序序列。

转换为元组

让我们从将列表转换为元组开始。 将列表转换为元组,因为它是不可变的数据类型,可以对我们创建的程序进行大量优化。 当我们使用方法 tuple() 时,它将返回传递给它的值的元组版本。

print(tuple(['pull request', 'open source', 'repository', 'branch']))
Output('pull request', 'open source', 'repository', 'branch')

我们看到在输出中打印出一个元组,因为这些项目现在包含在括号中而不是方括号中。

让我们将 tuple() 与表示列表的变量一起使用:

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']
print(tuple(sea_creatures))
Output('shark', 'cuttlefish', 'squid', 'mantis shrimp')

同样,我们看到列表值更改为元组值,由括号指示。 我们可以将任何可迭代类型转换为元组,包括字符串:

print(tuple('Sammy'))
Output('S', 'a', 'm', 'm', 'y')

因为我们可以遍历字符串,所以我们可以使用 tuple() 方法将它们转换为元组。 但是,对于不可迭代的数据类型,例如整数和浮点数,我们将收到类型错误:

print(tuple(5000))
OutputTypeError: 'int' object is not iterable

虽然可以将整数转换为字符串,然后再转换为元组,如 tuple(str(5000)),但最好选择可读代码而不是复杂的转换。

转换为列表

当您需要该值的可变版本时,将值(尤其是元组)转换为列表会很有用。

我们将使用 list() 方法将以下元组转换为列表。 因为创建列表的语法使用括号,所以一定要包括 list() 方法的括号,在这种情况下也包括 print() 方法:

print(list(('blue coral', 'staghorn coral', 'pillar coral')))
Output['blue coral', 'staghorn coral', 'pillar coral']

方括号表示已从通过 list() 方法传递的原始元组值返回列表。

为了使代码更具可读性,我们可以使用变量删除一对括号:

coral = ('blue coral', 'staghorn coral', 'pillar coral')
list(coral)

如果我们打印 list(coral) 我们将收到与上面相同的输出。

就像元组一样,字符串可以转换为列表:

print(list('shark'))
Output['s', 'h', 'a', 'r', 'k']

这里字符串 'shark' 被转换为一个列表,提供原始值的可变版本。

结论

本 Python 教程演示了如何主要通过内置方法将几种重要的本机数据类型转换为其他数据类型。 能够在 Python 中转换数据类型为您在编写程序时提供了额外的灵活性。