[Go to site: main page, start]

跳至内容

Python 数据类型转换:示例指南

在本 Python 教程中,您将通过代码示例,学习原始与非原始数据结构的隐式与显式数据类型转换。
更新 2026年7月22日  · 14分钟

用 AI 探索

在 ChatGPT 中打开在 Claude 中打开在 Perplexity 中打开

在 Python 中,每个值都有其数据类型。数据类型是对数据的分类,它告诉编译器或解释器您希望如何使用这些数据。类型定义了数据可以进行的操作以及数据应存储的结构。在数据科学中,您经常需要更改数据的类型,以便更易于使用和处理。

Python 拥有多种数据类型。您很可能已经见过并使用过其中一些。比如用于数值的整数和浮点数,用于真/假的布尔值(bool),以及用于字母数字字符的字符串。您还可以使用列表、元组、字典和集合,这些是可以存储一组值的数据结构。要进一步了解,请查看 DataCamp 的 Data Types in Python 课程。

若要轻松自行运行本教程中的所有示例代码,您可以免费创建一个 DataLab 工作簿,其中预装了 Python 并包含所有代码示例。

在 Python 中检查数据类型

在进行类型转换之前,先检查类型很有用。Python 提供了两个主要函数:

  • type():返回变量的类型。
  • isinstance():检查变量是否属于某种类型。
a = 5.5
print(type(a))  # Output: <class 'float'>

print(isinstance(a, int))  # Output: False
print(isinstance(a, float))  # Output: True

Python 的隐式与显式数据类型转换

在 Python 中,数据转换可以通过两种方式发生:要么您显式地告诉编译器将某种数据类型转换为另一种类型,要么编译器自行理解并为您完成转换。前者称为显式数据类型转换,后者称为隐式数据类型转换。

Python 隐式数据类型转换

隐式转换(或称强制转换)是指在编译或运行时发生的数据类型转换,由 Python 直接为您处理。来看一个示例:

a_int = 1
b_float = 1.0
c_sum = a_int + b_float
print(c_sum)
print(type(c_sum))
 2.0
<class 'float'>

提示:您可以使用 Python 中的 type() 函数来检查对象的数据类型。

在该示例中,将整数值 a_int 与浮点值 b_float 相加,结果在未显式指示编译器的情况下自动转换为浮点值 c_sum。这就是隐式数据转换。

为什么不把浮点数转换为整数呢?

这是由于计算机科学中更广泛的类型提升概念。简单来说,这是编译器的一种防御机制:在不丢失信息的前提下,将数据转换为一个更“高”类型,从而尽可能允许进行运算。

这意味着不会进行从浮点到整数的转换,因为那样编译器需要去掉小数部分,从而导致信息丢失。

Python 显式数据类型转换

显式数据类型转换(常称为类型转换,type casting)是指您有意地将一个值从一种数据类型转换为另一种数据类型。这种方式使您可以直接控制转换,因为您在代码中明确指定目标数据类型。当 Python 提供的自动(隐式)转换不满足您的需求时,这种方法最常用。

显式转换的语法为:

target_data_type(expression)

例如,如果您想把浮点数转换为整数,可以这样写:

int(3.14)  # Converts 3.14 to 3

注意:虽然显式转换非常有用,但也可能导致信息丢失。例如,将浮点数转换为整数会丢弃其小数部分。理解这些后果很重要,以避免程序出现意外结果。

下面我们来看看一些常用的显式数据类型转换。

Python 原始与非原始数据结构

原始数据结构是数据处理的基石,包含纯粹、简单的数据值。Python 有四种原始变量类型:

  • 整数(Integers)
  • 浮点数(Float)
  • 字符串(Strings)
  • 布尔值(Boolean)

非原始数据结构不仅存储单个值,而是以多种形式存储值的集合。在 Python 中,常见的非原始数据结构包括:

  • 列表(Lists)
  • 元组(Tuples)
  • 字典(Dictionaries)
  • 集合(Sets)

您可以通过 DataCamp 的 Data Structures in Python Tutorial 进一步了解它们。

原始数据结构的转换

Python 整数与浮点数转换

整数和浮点数是处理数字的数据类型。

要将整数转换为浮点数,请使用 Python 的 float() 函数。类似地,如果您想将浮点数转换为整数,可以使用 int() 函数。

a_int = 3
b_int = 2

# Explicit type conversion from int to float
c_float_sum = float(a_int + b_int)
print(c_float_sum)
5.0
a_float = 3.3
b_float = 2.0
# Explicit type conversion from float to int
c_int_sum = int(a_float + b_float)
print(c_int_sum)

c_float_sum = a_float + b_float
print(c_float_sum)
5
5.3

浮点精度问题与 Decimal 模块

Python 中的浮点运算可能产生精度问题:

print(0.1 + 0.2)  # Output: 0.30000000000000004

为避免此问题,请使用 Decimal 模块:

from decimal import Decimal

print(Decimal('0.1') + Decimal('0.2'))  # Output: 0.3

Python 实数到复数的转换

您可以使用 complex(real,imag) 将整数转换为复数。它需要两个整数(实部和虚部),并将实数转换为复数。

real = 2
imag = 5
print(complex(real, imag))
(2+5j)

Python 与字符串相关的数据类型转换

字符串是由一个或多个字符(字母、数字、符号)组成的集合。您可能经常需要在字符串与数字之间进行转换。

price_cake = 15
price_cookie = 6
total = price_cake + price_cookie
print("The total is: " + total  + "$")

 
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-12-54bd76b9b4bd> in <module>()
      2 price_cookie = 6
      3 total = price_cake + price_cookie
----> 4 print("The total is: " + total  + "$")


TypeError: Can't convert 'int' object to str implicitly

上述示例会抛出 TypeError,提示编译器无法隐式地将整数值转换为字符串。

程序此时应当如何处理,您也许有直觉判断。然而,编译器不一定能确定,所以提供了显式类型转换机制,让您能清楚表达意图。以下展示了如何使用 str() 函数在 Python 中将整数转换为字符串:

price_cake = 15
price_cookie = 6
total = price_cake + price_cookie
print("The total is: " + str(total)  + "$")
The total is: 21$

当您将浮点数转换为字符串时,做法也是类似的。

在 Python 中,只要可行,您也可以将字符串转换为整数和浮点数。来看示例:

price_cake = '15'
price_cookie = '6'

# String concatenation
total = price_cake + price_cookie
print("The total is: " + total + "$")

# Explicit type conversion to integer
total = int(price_cake) + int(price_cookie)
print("The total is: " + str(total)  + "$")
The total is: 156$
The total is: 21$

我们来分解一下这段代码。

price_cakeprice_cookie 起初是字符串。接着您需要求和,因此必须先将它们转换为相应的整数值。否则,编译器会认为您要进行的是字符串连接,而不是数值加法。最后,您需要将该值放入展示用的字符串中,因此又要把总价转换为字符串,以便与其余显示信息拼接。

希望这个例子能帮助您理解数据类型转换的重要性。即使这是一个非常小的例子,也足以说明其用处。

注意:当将字符串转换为整数或浮点数时,您是否注意到“只要可行”这句话?这是因为并非总能把字符串转换为数字并对其进行数值运算。编译器知道这一点,因此当您尝试这么做时会报错。请看下面的示例:

price_cake = 'fifteen'
price_cookie = 'six'
total = int(price_cake) + int(price_cookie)
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-25-80591b8accda> in <module>()
      1 price_cake = 'fifteen'
      2 price_cookie = 'six'
----> 3 total = int(price_cake) + int(price_cookie)


ValueError: invalid literal for int() with base 10: 'fifteen'

总结:Python 原始数据类型转换

转换 函数 示例 输出
整数转浮点 float() float(3) 3.0
浮点转整数 int() int(3.9) 3
字符串转整数 int() int('123') 123
整数转字符串 str() str(123) '123'

非原始数据结构的转换

Python 转换为元组与列表

与整数和浮点数类似,您也可以在列表与元组之间相互转换。

还记得元组和列表是什么吗?Python 中的 列表元组 用于存储同类项的集合。二者的区别在于,元组是不可变的,这意味着一旦定义,您无法在其中删除、添加或编辑任何值。

为什么要把列表转换为元组?

因为元组是不可变的数据类型,能为您编写的程序带来显著的优化。

那为什么又要把元组转换为列表?

也许您想对初始元组进行修改。那么可以先将其转换为列表,修改后再转回元组。

在 Python 中,您可以使用 tuple() 函数将传入的值转换为元组,类似地使用 list() 函数将元组转换为列表:

a_tuple = ('a', 1) ,('f', 2), ('g', 3)
b_list = [1,2,3,4,5]

print(tuple(b_list))
print(list(a_tuple))
(1, 2, 3, 4, 5)
[('a', 1), ('f', 2), ('g', 3)]

同样,以下展示了如何在 Python 中将字符串转换为列表或元组:

dessert = 'Cake'

# Convert the characters in a string to individual items in a tuple
print(tuple(dessert))

# Convert a string into a list
dessert_list = list(dessert)
dessert_list.append('s')
print(dessert_list)
('C', 'a', 'k', 'e')
['C', 'a', 'k', 'e', 's']

Python 转换为字典与集合

您可以使用 dict() 函数将元组转换为字典,使用 set() 将列表转换为集合。

print(dict(a_tuple))
print(set(b_list))
{'a': 1, 'f': 2, 'g': 3}
{1, 2, 3, 4, 5}

与其他转换函数类似,您只需提供函数名即可将任意数据类型转换为字典和集合。

使用 dataclasses 处理结构化数据(Python 3.7+)

相比字典或元组,dataclasses 提供了更好的结构化数据处理方式。

from dataclasses import dataclass

@dataclass
class Product:
    name: str
    price: float
    in_stock: bool

item = Product("Laptop", 799.99, True)
print(item)  # Output: Product(name='Laptop', price=799.99, in_stock=True)

总结:Python 非原始数据结构转换

转换 函数 示例 输出
列表转元组 tuple() tuple([1, 2, 3]) (1, 2, 3)
元组转列表 list() list(('a', 1)) ['a', 1]
字符串转列表 list() list('Cake') ['C', 'a', 'k', 'e']
字符串转元组 tuple() tuple('Cake') ('C', 'a', 'k', 'e')
元组转字典 dict() dict((('a', 1), ('b', 2))) {'a': 1, 'b': 2}
列表转集合 set() set([1, 2, 3, 4, 5]) {1, 2, 3, 4, 5}

Unicode、二进制、八进制与十六进制整数

数制指的是用于表示任意数值的符号或字符的数量。我们日常使用的数制称为十进制。在十进制系统中,您使用 0 至 9 共十个符号来表示任意数量。Unicode、二进制、十六进制与八进制指的是不同的数制。

当符号用尽时,您会进到下一位。在十进制中,要表示比 9 大 1 的数,就写作 10,表示一位“十”和零个“个”。然而在其他数制中不尽相同。例如,在只使用 0 和 1 两个符号的二进制中,当符号用尽时就要进位。因此二进制计数为:0、1、10、11、100、101,等等。

接下来我们将在后续部分更详细地了解这些数制。

Python 中的二进制转十进制

二进制整数是以二为底的数字系统中的数。这意味着在二进制中只使用 0 和 1 两个符号来表示数字。从 0 开始计数,很快就会用尽符号:0、1、???

此时已经没有更多符号。您不会写 2,因为 2 在二进制中不存在。相反,您会使用 1 和 0 的特殊组合。在二进制系统中,1000 等于十进制的 8。在二进制中使用 2 的幂,因此 8 基本上是:(1(2^3)) + (0(2^2)) + (0(2^1)) + (0(2^0)) = 8。1 和 0 的位置决定了 2 应被提升到的幂次。

为了更清楚,我们看一个更复杂的例子:

Binary Number = 1001111
Decimal value = (1*(2^6)) + (0*(2^5)) + (0*(2^4)) + (1*(2^3)) + (1*(2^2)) + (1*(2^1)) + (1*(2^0))
              = 79

在 Python 中,您可以直接使用 bin() 函数将十进制值转换为对应的二进制表示。

类似地,使用 int() 函数可以将二进制转换为十进制。int() 的第二个参数是要转换数字的进制,对二进制来说就是 2。

a = 79

# Base 2(binary)
bin_a = bin(a)
print(bin_a)
print(int(bin_a, 2)) #Base 2(binary)
0b1001111
79

Python 中的八进制转十进制

八进制是另一种比常规十进制更少符号的数制。它以 8 为底,使用 0、1、2、3、4、5、6、7 八个符号来表示所有数量。7 之后是 10,因为 8 在八进制中不存在。

就像在二进制中使用 2 的幂来确定数值一样,在八进制中您将使用 8 的幂。

在八进制中,10 等于十进制的 8。分解如下:(1(8^1)) + (0(8^0)) = 8。

更复杂的例子:

Octal Number = 117
Decimal value = (1*(8^2)) + (1*(8^1)) + (7*(8^0))
              = 79

在 Python 中,您可以使用 oct() 函数把十进制值转换为对应的八进制表示。或者,您也可以结合正确的进制(八进制为 8)使用 int() 函数。

a = 79

# Base 8(octal)
oct_a = oct(a)
print(oct_a)
print(int(oct_a, 8))
0o117
79

Python 中的十六进制转十进制

十六进制是以 16 为底的数制。与二进制和八进制不同的是,它在十进制数字之外还使用了六个额外的符号。

但 9 之后是什么?

当需要超过常规数字符号时,就会使用字母。因此在十六进制中,完整的符号列表为 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

沿用前面的例子:

Hexadecimal Number = 4F
Decimal value = (4*(16^1)) + (F*(16^0))
              = 79

在 Python 中,您可以使用 hex() 函数将十进制值转换为对应的十六进制表示,或使用以 16 为底的 int() 函数进行十六进制到十进制的转换。

a = 79

# Base 16(hexadecimal)
hex_a = hex(a)
print(hex_a)
print(int(hex_a, 16))
0x4f
79

将 Unicode 转为字符

Python 的 chr() 用于将 Unicode 整数转换为字符串。Unicode 是一种被广泛接受的字符编码,用于显示各种语言的书面文本。

我们向 chr() 函数提供了多个 Unicode 整数以显示 “DATACAMP”。您也可以使用 ord() 将单个字符转换为 Unicode 整数。

print(
    chr(68),
    chr(65),
    chr(84),
    chr(65),
    chr(67),
    chr(65),
    chr(77),
    chr(80),
)
D A T A C A M P

总结:Python 数制转换

转换 函数 示例 输出
十进制转二进制 bin() bin(79) 0b1001111
二进制转十进制 int() int('1001111', 2) 79
十进制转八进制 oct() oct(79) 0o117
八进制转十进制 int() int('117', 8) 79
十进制转十六进制 hex() hex(79) 0x4f
十六进制转十进制 int() int('4F', 16) 79
Unicode 转字符 chr() chr(68) 'D'
字符转 Unicode ord() ord('D') 68

恭喜,您完成了!

恭喜!您已经了解了 Python 中的数据类型转换,主要借助内置方法。这将帮助您在处理不同数据类型时更加灵活,从而更高效地编写程序。

我们还有一门优秀的课程 Intermediate Python for Data Science,其中您将学习如何使用 matplotlib 绘图,以及如何处理字典与广受欢迎的 pandas DataFrame。您还将看到如何使用循环来控制程序流程。课程末尾还包含一个案例研究,您可以应用所学并将知识付诸实践!

FAQs

如何在 Python 中将一个整数列表转换为单个字符串?

您可以将 join() 方法与 map() 结合使用,将每个整数转换为字符串并连接起来。

int_list = [1, 2, 3, 4]
result = ''.join(map(str, int_list))
print(result)  # Output: '1234'
如果尝试将非数字字符串转换为 Python 中的整数,会发生什么?

会抛出 ValueError,指出该字符串不是有效的整数。

int('abc')  # Raises ValueError: invalid literal for int() with base 10: 'abc'
可以在 Python 中将集合转换为列表吗?如何操作?

可以,您可以使用 list() 函数将集合转换为列表。

a_set = {1, 2, 3}
a_list = list(a_set)
print(a_list)  # Output: [1, 2, 3]
如何将由空格分隔的数字字符串转换为整数列表?

使用 split() 方法拆分字符串,然后用 map() 将每一部分转换为整数。

numbers = "1 2 3 4"
int_list = list(map(int, numbers.split()))
print(int_list)  # Output: [1, 2, 3, 4]
在 Python 中可以使用什么函数来检查变量的数据类型?

您可以使用 type() 函数检查变量的数据类型。

x = 5
print(type(x))  # Output: <class 'int'>
主题

通过这些课程进一步学习 Python!

Courses

Python 入门

4小时
6.9M
用 Python 在四小时内掌握数据分析基础。 本在线课程将介绍 Python 接口并探索常用包。
查看详情Right Arrow
开始课程
查看更多Right Arrow