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)
'''
在和数字运算时,True转为1,False转为0
'''
a = 10
b = 3.14
print(a + b)
'''
整型与浮点型运算时,整型转化为浮点型,结果也为浮点型
'''
2.2 强制类型转换
str( ):可以把其他类型数据转化为字符串类型 int( ):可以把其他类型数据转化为整型 float( ):可以把其他类型数据转化为浮点型 bool( ):可以把其他类型数据转化为布尔类型 list( ):可以把其他类型数据转化为列表类型 tuple( ):可以把其他类型数据转化为元组类型 dict( ):可以把其他类型数据转化为字典类型 set( ):可以把其他类型数据转化为集合类型
2.2.1 其他转字符串
所有类型都可以转化为字符串类型。
a = 123
res = str(a)
print(res, type(res))
a = True
res = str(a)
print(res, type(res))
a = [1, 2, 3]
res = str(a)
print(res, type(res))
a = (1, 2, 3)
res = str(a)
print(res, type(res))
a = {1, 2, 3}
res = str(a)
print(res, type(res))
a = {1: 'a', 2: 'b'}
res = str(a)
print(res, type(res))
2.2.2 其他转数字类型
数字类型之间可以相互转换,但容器类型中只有字符串可以转换为数字类型,并且字符串中的元素必须为纯数字,否则无法转换。
'''
1. 数字类型之间相互转换
'''
a = 123
res = float(a)
print(res, type(res))
a = True
res = float(a)
print(res, type(res))
'''
2. 字符串类型转数字类型
'''
a = '123'
res = int(a)
print(res, type(res))
a = '123abc'
res = int(a)
print(res, type(res))
a = [1, 2, 3]
res = int(a)
print(res, type(res))
其他类型转数字类型中有一个特殊情况,就是其他类型转布尔类型。 bool( ) 可以把其他类型转为True或False。
'''
1. 容器类型转布尔类型:
容器中为空 --> False
容器中有元素 --> True
'''
a = ''
res = bool(a)
print(res, type(res))
a = '0'
res = bool(a)
print(res, type(res))
a = []
res = bool(a)
print(res, type(res))
a = [1, 2, 3]
res = bool(a)
print(res, type(res))
a = tuple()
res = bool(a)
print(res, type(res))
a = dict()
res = bool(a)
print(res, type(res))
a = set()
res = bool(a)
print(res, type(res))
'''
2. 数字类型转布尔类型:
int类型中,0为False,其他为真
float类型中,0.0为False,其他为真
'''
a = 0
res = bool(a)
print(res, type(res))
a = 0.0
res = bool(a)
print(res, type(res))
a = 0.345
res = bool(a)
print(res, type(res))
2.2.3 其他转列表类型
- 数字类型是非容器类型,不能转换为列表
- 字符串转列表时,会把字符串中的每一个字符当作列表的元素
- 元组转列表时,会把字符串中的每一个字符当作列表的元素
- 字典转列表时,只保留字典中的键
- 集合转列表时,结果是无序的,因为集合本身就是无序的
a = '123'
res = list(a)
print(res, type(res))
a = (1, 2, 3)
res = list(a)
print(res, type(res))
a = {'name': 'Alice', 'Age': 5, 'Sex': 'Female'}
res = list(a)
print(res, type(res))
a = {'a', 'b', 1, 2, 'c'}
res = print(a)
print(res, type(res))
2.2.4 其他转元组类型
其他类型数据转元组类型与其他类型数据转列表类型的规则相同。
a = 'abc'
res = tuple(a)
print(res, type(res))
a = [1, 2, 3]
res = tuple(a)
print(res, type(res))
a = {'name': 'Alice', 'Age': 5, 'Sex': 'Female'}
res = tuple(a)
print(res, type(res))
a = {'a', 'b', 1, 2, 'c'}
res = tuple(a)
print(res, type(res))
2.2.5 其他转集合类型
- 数字类型是非容器类型,不能转换为集合
- 字符串转集合时,结果是无序的
- 列表转集合时,结果是无序的
- 元组转集合时,结果是无序的
- 字典转集合时,只保字典中的键,结果是无序的
a = '123'
res = set(a)
print(res, type(res))
a = ['a', 'b', 2, 1]
res = set(a)
print(res, type(res))
a = ('a', 'b', 2, 1)
res = set(a)
print(res, type(res))
a = {'name': 'Alice', 'Age': 5, 'Sex': 'Female'}
res = set(a)
print(res, type(res))
2.2.6 其他转字典类型
- 数字类型是非容器类型,不能转换为字典
- 字符串不能转字典类型,因为字符串不能生成二级容器
- 列表类型转字典类型,列表必须为等长二级容器,子容器中的元素个数必须为2
- 元组类型转字典类型,列表必须为等长二级容器,子容器中的元素个数必须为2
- 集合不能转字典类型,因为集合不支持哈希
a = '123'
res = dict(a)
print(res, type(res))
a = [[1, 2], ['a','b']]
res = dict(a)
print(res, type(res))
a = ((1, 2), (3, 4), (5, 6))
res = dict(a)
print(res, type(res))
a = {{1, 2}, {3, 4}}
res = dict(a)
print(res,type(res))
|