个性化阅读
专注于IT技术分析

Python数据类型转换教程

本文概述

Python中的每个值都有一个数据类型。数据类型是数据的分类, 它告诉编译器或解释器你要如何使用数据。该类型定义可以对数据执行的操作以及要将数据存储在其中的结构。在数据科学中, 你经常需要更改数据类型, 以便变得更易于使用和使用。

本教程将介绍一些重要且最常用的数据结构, 你将学习更改其类型以适合你的需求。更具体地说, 你将学习:

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

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

隐式和显式数据类型转换

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()函数来检查对象的数据类型。

在该示例中, 将int值a_int添加到浮点值b_float, 并且无需将编译器通知即可将结果自动转换为浮点值c_sum。这是隐式数据转换。

为什么未将float值转换为整数?

这是由于计算机科学中类型推广的更广泛概念所致。简而言之, 这是编译器的一种防御机制, 通过将数据转换为其他超类型而不会丢失信息, 允许你尽可能执行操作。

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

Python显式数据类型转换

显式转换(也称为类型转换)是在进行数据类型转换时进行的, 因为你已在程序中明确定义了它。你基本上可以将表达式强制为特定类型。显式数据类型转换的一般形式如下:

(required_data_type)(expression)

注意:如你所料, 使用显式数据类型转换时, 存在信息丢失的风险, 因为你将表达式强制为特定类型。

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

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

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

  • 整数
  • float
  • 弦乐
  • boolean

非原始数据结构不仅存储值, 而且还存储各种格式的值的集合。在Python中, 你具有以下非原始数据结构:

  • 清单
  • 元组
  • 字典
  • 套装

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

整数和浮点转换

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

要将整数转换为float, 请在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

字符串数据类型转换

字符串是一个或多个字符(字母, 数字, 符号)的集合。你可能需要经常将字符串转换为数字或将数字转换为字符串。查看如何使用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$

将float转换为字符串值时, 其工作方式相同。

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

希望该示例可以帮助你了解数据类型转换的重要性。即使这只是数据类型转换的一个很小的例子, 你已经可以看到它的用处。

注意:在尝试将字符串转换为整数或浮点数时, 你是否注意到”尽可能”?这是因为并非总是可能将字符串转换为数字并对其应用数字运算。编译器意识到这一点, 因此在尝试这样做时会给你一个错误。查看以下示例:

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中的列表和元组用于存储同类项目的集合。元组和列表之间的区别在于元组是不可变的, 这意味着一旦定义, 就不能删除, 添加或编辑其中的任何值。

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

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

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

也许你想更改初始元组。因此, 你可以将它们转换为列表, 然后进行更改, 然后将其转换回元组。

你可以使用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表示十的一单位和零的一。但是, 在其他号码系统中则有所不同。例如, 当你考虑仅使用两个符号的二进制系统时:0和1, 当符号用完时, 需要转到下一个数字位置。因此, 这就是二进制数的计算方式:0、1、10、11、100、101, 依此类推。

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

转换为二进制数

二进制整数是以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的幂。

让我们用一个更复杂的例子来说明这一点:

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

转换为八进制

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

就像你使用二进制的2的幂来确定数字的值一样, 你将使用8的幂, 因为这是基数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()函数将十进制值转换为其相应的八进制值。另外, 你也可以将int()函数与正确的基数(八进制数字系统的基数为8)一起使用。

a = 79

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

类型转换为十六进制

十六进制是一个以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

你做到了!

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

srcmini在数据科学中级Python方面有一门非常棒的课程, 你可以在其中学习如何使用matplotlib绘制数据, 如何使用字典和著名的熊猫DataFrame。你还将看到如何使用循环来控制程序的流程。在课程的最后还有一个案例研究, 你将可以运用所学到的知识并运用自己的知识!第一章是免费的, 请继续尝试!

赞(0)
未经允许不得转载:srcmini » Python数据类型转换教程

评论 抢沙发

评论前必须登录!