Python数据类型转换教程详细指南

2021年11月9日15:00:28 发表评论 862 次浏览

在这个Python数据类型转换教程中,你将借助代码示例处理原始和非原始数据结构的隐式和显式数据类型转换!

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

Python如何转换数据类型?本教程将处理一些重要且最常用的数据结构,你将学习更改它们的类型以满足你的需要。更具体地说,你将学习:

  • 隐式和显式数据类型转换
  • 原始数据结构与非原始数据结构
  • 整数和浮点数转换
  • 字符串数据类型转换
  • 转换为元组和列表
  • Python 中的二进制、八进制和十六进制整数

Python 有很多数据类型。你一定已经看过其中的一些并与之合作过。你可以使用整数和浮点数来处理数值,使用布尔值 ( bool) 来处理真/假值,使用字符串来处理字母数字字符。你可以使用列表、元组、字典和集合作为可以存储值集合的数据结构。要了解有关它们的更多信息,请务必查看 DataCamp 的数据科学课程的数据类型。

隐式和显式数据类型转换

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

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

在示例中,一个 int 值a_int被添加到一个浮点值b_float,结果自动转换为一个浮点值,c_sum而无需告诉编译器。这就是隐式数据转换。

为什么浮点值没有转换为整数?

这是由于计算机科学中更广泛的类型提升概念。简单地说,这是编译器的一种防御机制,它允许你通过将数据转换为不同的超类型来尽可能执行操作而不会丢失信息。

这意味着没有完成从浮点数到整数的转换,因为这样编译器将需要删除导致信息丢失的小数部分。

Python数据类型转换教程:Python显式数据类型转换

显式转换也被称为类型转换是当数据类型转换发生,因为你清楚你的程序中定义了它的地方。你基本上强制表达式为特定类型。转换数据类型的方式有哪些?显式数据类型转换的一般形式如下:

(required_data_type)(expression)

注意:正如你想象的那样,通过显式数据类型转换,存在信息丢失的风险,因为你强制表达式为特定类型。

考虑到所有这些,你可以深入研究一些常用的显式数据类型转换......

原始数据结构与非原始数据结构

原始数据结构是数据操作的构建块,包含纯粹、简单的数据值。Python 有四种原始变量类型:

  • 整数
  • 漂浮
  • 字符串
  • 布尔值

非原始数据结构不只是存储一个值,而是各种格式的值的集合。在 Python 中,你有以下非原始数据结构:

  • 列表
  • 元组
  • 字典

你可以通过Python 教程中的DataCamp数据结构了解更多关于它们的信息

整数和浮点数转换

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

Python如何转换数据类型?要将整数转换为浮点数,请使用float()Python 中的函数。同样,如果要将浮点数转换为整数,可以使用该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

Python数据类型转换教程:字符串数据类型转换

字符串是一个或多个字符(字母、数字、符号)的集合。你可能需要经常将字符串转换为数字或将数字转换为字符串。查看如何使用该str()函数执行此操作:

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,通知编译器不能将整数值隐式转换为字符串。

程序在这里应该做什么对你来说似乎很直观。但是,编译器可能并不总是确定的,这就是为什么它提供了一种具有显式类型转换的机制,以便你可以清楚地说明你想要什么。让我们看一下相同的类型转换示例:

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_cake并且price_cookie最初是字符串。然后,你需要找到总数,这意味着必须先将它们转换为相应的整数值。否则,编译器将假定你想要的操作是字符串连接而不是数字加法。然后,你需要将此值放入最终显示字符串中,因此需要将总数转换为字符串,以便将其与显示消息的其余部分连接起来。

希望这个例子可以帮助你了解数据类型转换的重要性。尽管这是一个非常小的数据类型转换示例,但你已经可以看到它的用处。

注意:在尝试将字符串转换为整数或浮点数时,你是否注意到“尽可能”?这是因为并不总是可以将字符串转换为数字并对它们应用数字运算。编译器知道这一点,因此在你尝试这样做时会出现错误。看看下面的Python数据类型转换示例

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如何转换数据类型?就像整数和浮点数一样,你也可以将列表转换为元组,将元组转换为列表。

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

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

这是因为元组是不可变的数据类型,允许对你创建的程序进行大量优化。

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

转换数据类型的方式有哪些?也许你想对初始元组进行更改。因此,你可以将它们转换为列表,然后进行更改,然后将它们转换回元组。

你可以使用该tuple()函数返回传递给它的值的元组版本,以及类似地list()转换为列表的函数:

a_tuple = (1,2,3,4,5,6,7,8,9,10)
b_list = [1,2,3,4,5]

print(tuple(b_list))
print(list(a_tuple))
(1, 2, 3, 4, 5)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

你还可以将字符串转换为列表或元组。

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 中的二进制、八进制和十六进制整数

数字系统是指用于表示任何数值的符号或字符的数量。你通常每天使用的数字系统称为十进制。在十进制系统中,你使用十个不同的符号:0、1、2、3、4、5、6、7、8 和 9。使用这十个符号,你可以表示任何数量。二进制、十六进制和八进制指的是不同的数字系统。

当你用完符号时,你将转到下一个数字位置。在十进制系统中,要表示大于 9 的 1,请使用 10 表示 10 的一个单位和 1 的 0 个单位。但是,在其他数系中就不同了。例如,当你考虑一个只使用两个符号的二进制系统时:0 和 1,当你用完符号时,你需要转到下一个数字位置。所以这就是你将如何计算二进制数:0, 1, 10, 11, 100, 101 等等。

让我们在接下来的部分中更详细地查看一些数字系统。

Python数据类型转换教程:转换为二进制数

二进制整数是以 2 为底数表示的数字。这意味着在二进制数系统中,只有两个符号用于表示数字:0 和 1。当你在二进制中从零开始计数时,你会更快地用完符号: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 的乘方。

让我们用一个更复杂的Python数据类型转换示例来说明这一点:

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

转换为八进制

八进制是另一种数字系统,使用的符号比传统的十进制数字系统少。八进制是八进制,这意味着用八个符号来表示所有的量。它们是 0、1、2、3、4、5、6 和 7。7 之后是 10,因为 8 不存在。

转换数据类型的方式有哪些?就像你使用二进制中的 2 的幂来确定数字的值一样,你将使用 8 的幂,因为这是以 8 为底的。

在二进制系统中,10 等于八进制的 8。让我们分解一下:(1 (8^1)) + (0 (8^0))= 8。

一个更复杂的Python数据类型转换示例:

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

在 Python 中,你可以使用该oct()函数将十进制值转换为其对应的八进制值。或者,你也可以将该int()函数与八进制数系统的正确基数 8 一起使用。

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()函数将十进制值转换为其对应的十六进制值,或者int()使用十六进制数系统的基数为 16的函数,Python数据类型转换示例代码:

a = 79

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

Python数据类型转换教程总结

恭喜!你主要使用内置方法学习了 Python 中的数据类型转换。这肯定会帮助你处理各种数据类型,在编写程序时为你提供更大的灵活性。

DataCamp 有一门关于数据科学中级 Python的优秀课程,你可以在其中学习如何使用 matplotlib 绘制数据、使用字典和著名的 Pandas DataFrame。你还将看到如何使用循环来控制程序的流程。在课程结束时还有一个案例研究,你将在其中应用你所学的所有知识并将你的知识付诸实践!第一章是免费的,快来试试吧!

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: