Python数据类型转换教程

本文概述

  • 隐式和显式数据类型转换
  • 原始数据与非原始数据结构
  • 整数和浮点转换
  • 字符串数据类型转换
  • 类型转换为元组和列表
  • Python中的二进制, 八进制和十六进制整数
  • 你做到了!
【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+ "$")

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

---------------------------------------------------------------------------ValueErrorTraceback (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 = http://www.srcmini.com/(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 = http://www.srcmini.com/(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 = http://www.srcmini.com/(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。你还将看到如何使用循环来控制程序的流程。在课程的最后还有一个案例研究, 你将可以运用所学到的知识并运用自己的知识!第一章是免费的, 请继续尝试!

    推荐阅读