Python数据类型转换详解
作者:cheuklam 发布时间:2021-03-04 04:11:13
1. Python的数据类型
上一遍博文已经详细地介绍了Python的数据类型,详见链接Python的变量命名及数据类型。
在这里总结一下Python的数据类型:
字符串类型 String
数字类型 Number:
整形 int
浮点型 float
复数 complex
布尔类型 Bool列
表类型 List
元组类型 Tuple
字典类型 Dictionary
集合类型 Set
可变数据类型:列表,字典,集合
不可变数据类型:字符串,数字类型,布尔类型,元组
容器类型数据:字符串,列表,元组,字典,集合
非容器类型数据:数字类型,布尔类型
2. Python数据类型转换
由于不同的数据类型之间是不能进行运算的,所以我们需要数据类型转换。Python中的数据类型转换有两种,一种是自动类型转换,即Python在计算中会自动地将不同类型的数据转换为同类型数据来进行计算;另一种是强制类型转换,即需要我们基于不同的开发需求,强制地将一个数据类型转换为另一个数据类型。
2.1 自动类型转换
当两个不同类型的数据进行运算时,结果会像更高精度进行计算,精度等级:布尔 < 整型 < 浮点型 < 复数。
a = 10
b = True
print(a + b) # 11
'''
在和数字运算时,True转为1,False转为0
'''
a = 10
b = 3.14
print(a + b) # 13.14
'''
整型与浮点型运算时,整型转化为浮点型,结果也为浮点型
'''
2.2 强制类型转换
str( ):可以把其他类型数据转化为字符串类型
int( ):可以把其他类型数据转化为整型
float( ):可以把其他类型数据转化为浮点型
bool( ):可以把其他类型数据转化为布尔类型
list( ):可以把其他类型数据转化为列表类型
tuple( ):可以把其他类型数据转化为元组类型
dict( ):可以把其他类型数据转化为字典类型
set( ):可以把其他类型数据转化为集合类型
2.2.1 其他转字符串
所有类型都可以转化为字符串类型。
a = 123 # int
res = str(a)
print(res, type(res)) # 123 <class 'str'>
a = True # bool
res = str(a)
print(res, type(res)) # True <class 'str'>
a = [1, 2, 3] # list
res = str(a)
print(res, type(res)) # [1, 2, 3] <class 'str'>
a = (1, 2, 3) # tuple
res = str(a)
print(res, type(res)) # (1, 2, 3) <class 'str'>
a = {1, 2, 3} # set
res = str(a) # {1, 2, 3}
print(res, type(res)) # {1, 2, 3} <class 'str'>
a = {1: 'a', 2: 'b'} # dict
res = str(a)
print(res, type(res)) # {1: 'a', 2: 'b'} <class 'str'>
2.2.2 其他转数字类型
数字类型之间可以相互转换,但容器类型中只有字符串可以转换为数字类型,并且字符串中的元素必须为纯数字,否则无法转换。
'''
1. 数字类型之间相互转换
'''
a = 123 # int
res = float(a)
print(res, type(res)) # 123.0 <class 'float'>
a = True # bool
res = float(a)
print(res, type(res)) # 1.0 <class 'float'>
'''
2. 字符串类型转数字类型
'''
a = '123' # str
res = int(a)
print(res, type(res)) # 123 <class 'int'>
a = '123abc' # str
res = int(a)
print(res, type(res)) # 此时python会报错,报错类型为TypeError
a = [1, 2, 3] # list
res = int(a)
print(res, type(res)) # 此时同样会报错,因为除了字符串以外的其他容器类型都不可以转换成数字类型
其他类型转数字类型中有一个特殊情况,就是其他类型转布尔类型。 bool( ) 可以把其他类型转为True或False。
'''
1. 容器类型转布尔类型:
容器中为空 --> False
容器中有元素 --> True
'''
a = '' # 空字符串
res = bool(a)
print(res, type(res)) # False <class 'bool'>
a = '0' # 字符串中有元素
res = bool(a)
print(res, type(res)) # True <class 'bool'>
a = [] # 空列表
res = bool(a)
print(res, type(res)) # False <class 'bool'>
a = [1, 2, 3] # 列表中有元素
res = bool(a)
print(res, type(res)) # True <class 'bool'>
a = tuple() # 空元组
res = bool(a)
print(res, type(res)) # False <class 'bool'>
a = dict() # 空字典
res = bool(a)
print(res, type(res)) # False <class 'bool'>
a = set() # 空集合
res = bool(a)
print(res, type(res)) # False <class 'bool'>
'''
2. 数字类型转布尔类型:
int类型中,0为False,其他为真
float类型中,0.0为False,其他为真
'''
a = 0 # int
res = bool(a)
print(res, type(res)) # False <class 'bool'>
a = 0.0 # float
res = bool(a)
print(res, type(res)) # False <class 'bool'>
a = 0.345 # float
res = bool(a)
print(res, type(res)) # True <class 'bool'>
2.2.3 其他转列表类型
1.数字类型是非容器类型,不能转换为列表
2.字符串转列表时,会把字符串中的每一个字符当作列表的元素
3.元组转列表时,会把字符串中的每一个字符当作列表的元素
4.字典转列表时,只保留字典中的键
5.集合转列表时,结果是无序的,因为集合本身就是无序的
a = '123' # str
res = list(a)
print(res, type(res)) # ['1', '2', '3'] <class 'list'>
a = (1, 2, 3) # tuple
res = list(a)
print(res, type(res)) # ['1', '2', '3'] <class 'list'>
a = {'name': 'Alice', 'Age': 5, 'Sex': 'Female'} # dict
res = list(a)
print(res, type(res)) # ['name', 'Age, 'Sex'] <class 'list'>
a = {'a', 'b', 1, 2, 'c'} # set
res = print(a)
print(res, type(res)) # ['b', 2, 1, 'a', 'c'] <class 'list>
2.2.4 其他转元组类型
其他类型数据转元组类型与其他类型数据转列表类型的规则相同。
a = 'abc' # str
res = tuple(a)
print(res, type(res)) # ('a', 'b', 'c') <class 'tuple>
a = [1, 2, 3] # list
res = tuple(a)
print(res, type(res)) # (1, 2, 3) <class 'tuple>
a = {'name': 'Alice', 'Age': 5, 'Sex': 'Female'} # dict
res = tuple(a)
print(res, type(res)) # ('name', 'Age, 'Sex') <class 'tuple>
a = {'a', 'b', 1, 2, 'c'} # set
res = tuple(a)
print(res, type(res)) # ('b', 2, 1, 'a', 'c') <class 'tuple>
2.2.5 其他转集合类型
1.数字类型是非容器类型,不能转换为集合
2.字符串转集合时,结果是无序的
3.列表转集合时,结果是无序的
4.元组转集合时,结果是无序的
5.字典转集合时,只保字典中的键,结果是无序的
a = '123' # str
res = set(a)
print(res, type(res)) # {'3', '2', '1'} <class 'set'>
a = ['a', 'b', 2, 1] # list
res = set(a)
print(res, type(res)) # {2, 1, 'b', 'a'} <class 'set'>
a = ('a', 'b', 2, 1) # tuple
res = set(a)
print(res, type(res)) # {2, 1, 'b', 'a'} <class 'set'>
a = {'name': 'Alice', 'Age': 5, 'Sex': 'Female'} # dict
res = set(a)
print(res, type(res)) # {'Age', 'name', 'Sex'} <class 'tuple>
2.2.6 其他转字典类型
1.数字类型是非容器类型,不能转换为字典
2.字符串不能转字典类型,因为字符串不能生成二级容器
3.列表类型转字典类型,列表必须为等长二级容器,子容器中的元素个数必须为2
4.元组类型转字典类型,列表必须为等长二级容器,子容器中的元素个数必须为2集
5.合不能转字典类型,因为集合不支持哈希
a = '123' # str
res = dict(a)
print(res, type(res)) # 此时python会报错:ValueError: dictionary update sequence element #0 has length 1; 2 is required
a = [[1, 2], ['a','b']] # 等长二级列表
res = dict(a)
print(res, type(res)) # {1: 2, 'a': 'b'} <class 'dict'>
a = ((1, 2), (3, 4), (5, 6)) # 等长二级元组
res = dict(a)
print(res, type(res)) # {1: 2, 3: 4, 5: 6} <class 'tuple'>
a = {{1, 2}, {3, 4}} # 等长二级集合
res = dict(a)
print(res,type(res)) # 此时python会报错:TypeError: unhashable type: 'set'
来源:https://blog.csdn.net/cheuklam/article/details/120555191
猜你喜欢
- 解决Microsoft VBScript 运行时错误 (0x800A0046) 没有权限的解决方案,0x800a0046错误。前段时间在做站
- 从信息组织角度来看,段落内行之间的关系要比段落之间的关系低一个级别,所以在呈现上段落之间的“段距”应该大于段落之内的“行距”,如此才能一目了
- PHP session用法其实很简单它可以把用户提交的数据以全局变量形式保存在一个session中并且会生成一个唯一的session_id,
- If...Then...Else 语句的一种变形,即添加任意多个 ElseIf 子句以扩充 If...Then...Else 语句的功能,允
- 升级了浏览器到IE9,今天进入公司网站后台突然发现有些页面进不去了,F12调试显示有JS错误:DOM Exception: INVALID_
- URL 编码是什么东东呢?看看我从网上抄的定义: 引用: url编码是一种浏览器用来打包
- 1. 什么是XSLT 大家可能听说过XSL(eXtensible Stylesheet Language),XSL和我们这里说的XSLT从狭
- PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php
- 许多服务器管理员都知道,MySQL数据库管理系统(RDBMS)是高度灵活的软件块,带有范围广阔的启动选项,可以用来修改相关行为。然而,大部分
- 什么是Canvas<canvas> 是一个新的 HTML 元素,这个元素在 HTML5&
- 这是写给web设计者和前端开发者的教程,我们将演示如何使用Photoshop创建按钮的sprite图,然后是如何使用jQurey打造动态渐变
- 页面大小、窗口大小和滚动条位置这三个数值在不同的浏览器例如Firefox和IE中有着不同的实现。即使在同一种浏览器例如IE中,不同版本也有不
- 我开发过几个采集程序,也研究过很多采集程序代码,所以对采集程序的原理还算是稍微有些了解。先说一下采集原理:采集程序的主要步骤如下: 一、获取
- (一) 常用的CSS命名规则:头:header内容:content/container尾:footer导航:nav侧栏:sidebar栏目:
- 一、原型模式原型是相对于复制、克隆而言的,但是不同于模板,模板创造出的东西是一模一样,而原型创造出的东西是允许存在差异化和个性化的。原型模式
- 这几天在落伍上转转,发现有朋友不太明白一些网站在会员注册时,当输入用户名后没按“确定”提交数据,系统也能马上检测该用户名是否已经存在。在此我
- 如何在ADO中使用SQL函数?代码见下:<%Set conn1 = Server.CreateObjec
- 这是我的第一个真正意思上的自动化脚本。1、练习的测试用例为:打开百度首页,搜索“胡歌”,然后检索列表,有无“胡歌的新浪微博”这个链接 2、在
- adodb.stream对象的方法/属性cancel 方法使用方法如下object.cancel说明:取消执行挂起的异步 execute 或
- 下面给出ORACLE的一种实现方式,要分2步走:1. 建立 SEQUENCE CREATE [ OR REPLACE ] SEQUENCE