1. Python的数据类型
上一遍博文已经详细地介绍了Python的数据类型,详见链接Python的变量命名及数据类型。
在这里总结一下Python的数据类型:
- 字符串类型 String
- 数字类型 Number:
整形 int
浮点型 float
复数 complex
- 布尔类型 Bool列
- 表类型 List
- 元组类型 Tuple
- 字典类型 Dictionary
- 集合类型 Set
可变数据类型:列表,字典,集合
不可变数据类型:字符串,数字类型,布尔类型,元组
容器类型数据:字符串,列表,元组,字典,集合
非容器类型数据:数字类型,布尔类型
2. Python数据类型转换
由于不同的数据类型之间是不能进行运算的,所以我们需要数据类型转换。Python中的数据类型转换有两种,一种是自动类型转换,即Python在计算中会自动地将不同类型的数据转换为同类型数据来进行计算;另一种是强制类型转换,即需要我们基于不同的开发需求,强制地将一个数据类型转换为另一个数据类型。
2.1 自动类型转换
当两个不同类型的数据进行运算时,结果会像更高精度进行计算,精度等级:布尔 < 整型 < 浮点型 < 复数。
1
2
3
4
5
6
7
8
9
10
11
12
|
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 其他转字符串
所有类型都可以转化为字符串类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
'''
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
'''
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.集合转列表时,结果是无序的,因为集合本身就是无序的
1
2
3
4
5
6
7
8
9
10
11
12
|
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 其他转元组类型
其他类型数据转元组类型与其他类型数据转列表类型的规则相同。
1
2
3
4
5
6
7
8
9
10
11
12
|
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.字典转集合时,只保字典中的键,结果是无序的
1
2
3
4
5
6
7
8
9
10
11
12
|
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.合不能转字典类型,因为集合不支持哈希
1
2
3
4
5
6
7
8
9
10
11
12
|
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