- Python3从入门到实战
- 董洪伟
- 2598字
- 2020-08-27 19:57:34
2.3 数据类型概述
Python自带了一些内在数据类型(内在类型),主要内在数据类型包括数值(number)、字符串(str)、列表(list)、元组(tuple)、集合(set)、字典(dict)。
2.3.1 数值类型
数值类型不是一个单独的类型,而可分为int(整型)、float(浮点型)、complex(复数类型)、bool(布尔类型)。
bool型用于表示一个逻辑量,即一个命题的真和假,因此只有表示真和假的两个值True、False。
例如:
>>>type(5) int >>>type(3.14) float >>>type(2+3j) complex >>>type(False) bool
只要计算机内存足够,Python的整型的长度就可以任意长。但浮点型的值小数点后的精度不超过15位,而复数型的值总是写成x+yi形式。
a=1234567890123456789 b=0.1234567890123456789 c=1+2j print(a) print(b) print(c)
输出:
1234567890123456789 0.12345678901234568 (1+2j)
2.3.2 列表
list是一个数据元素的有序序列,定义列表时用一对左右方括号[ ]包围,元素之间用逗号隔开。list中的元素可以是不同的类型。例如:
[2, 3.14, 'python']
list中的元素的类型是任意的,当然可以包含其他的list对象。例如:
[2, 3.14, [3,6,9], 'python']
因为list是一个有序序列,所以其中的每个元素都有唯一的下标,下标从0开始,即第1、2、3、…元素的下标依次是0、1、2、…。因此,对于list对象可以用下标运算符[]访问它的一个元素或一系列连续的元素。
my_list=[2, 3.14, 8, 'python',9, 'hello'] print(type(my_list)) #打印my_list的类型,即list类型 print(my_list) print(my_list[0]) print(my_list[3])
输出:
<class 'list'> [2, 3.14, 8, 'python', 9, 'hello'] 2 python
还可以通过向下标运算符[ ]传递起始位置和结束位置的两个下标,返回连续多个元素组成的子列表(不包含结束位置的元素)。格式如下:
list[start:end]
起始位置和结束位置下标之间用冒号:隔开。例如:
my_list=[2, 3.14, 8, 'python',9, 'hello'] print(my_list[1:4]) #从第2个到第5个,不包含第5个 print(my_list[2:]) #起始位置下标为2,没有结束位置下标,表示从起始位置下标之后的所有元素 print(my_list[:4]) #没有起始位置下标,表示起始位置下标默认为0 print(my_list[:]) #没有起始位置和结束位置下标,表示所有元素
输出:
[3.14, 8, 'python'] [8, 'python', 9, 'hello'] [2, 3.14, 8, 'python'] [2, 3.14, 8, 'python', 9, 'hello']
list对象是可修改的(mutable)。例如:
my_list=[2, 3.14, 8, 'python',9, 'hello'] my_list[2]=’小白’ print(my_list)
输出:
[2, 3.14, ’小白’, 'python', 9, 'hello']
为指定下标范围内的元素重新赋值,从而替换为另一个list。例如:
my_list=[2, 3.14, 8, 'python',9, 'hello'] my_list[2:5]=[10,25] print(my_list)
输出:
[2, 3.14, 10, 25, 'hello']
为指定下标范围内的元素赋值一个空的list[ ],相当于删除这个范围内的元素。例如:
my_list=[2,3.14,10,25, 'hello'] my_list[2:4]=[] #相当于删除了[2:4]之间的元素,不包括下标为4的元素 print(my_list)
输出:
[2, 3.14, 'hello']
必须给下标范围内的元素赋值一个list对象,如果赋值非list对象则会出错。例如:
my_list[1:3]=5
产生TypeError(类型错误):
---------------------------------------------------------------------- TypeError Traceback(most recent call last) <ipython-input-10-22d1f85b1294> in <module>() ----> 1 my_list[1:3]=5
TypeError: can only assign an iterable
2.3.3 元组
和list一样,元组(tuple)也是一个有序序列,也就是每个元素也有唯一的下标,但tuple是不可修改的(immutable),另外,定义tuple时用圆括号而不是方括号。例如:
t=('python', [2,5],37,3.14, "https://a.hwdong.com") print(type(t))
输出:
<class 'tuple'>
可以用下标运算符[]访问tuple的元素:
print(t[2]) print(t[0:3]) print(t[:4])
输出:37
('python', [2, 5], 37)
('python', [2, 5], 37, 3.14)
但不可以通过下标修改tuple对象,因为tuple是不可修改的。例如:
t[1]='helo'
产生下列类型错误(TypeError):
TypeError Traceback(most recent call last) <ipython-input-14-30808fa682a5> in <module>() ----> 1 t[1]='helo' TypeError: 'tuple' object does not support item assignment
注意
只有一个元素的tuple的最后必须加一个逗号,如(25,)表示一个tuple,而(25)表示一个整数。
2.3.4 字符串
1.字符串(str)
字符串是UniCode字符的有序序列,可以用置于首尾的单引号或双引号包围一个字符序列来表示字符串。如果字符串的内容写在多行,则首尾分别要用三个单引号或双引号包围多行的字符序列。
单引号表示的字符串中可以包含双引号字符,但不能直接包含单引号(否则无法知道字符串的开始结尾在哪里)。同样,双引号表示的字符串中可以包含单引号,但不能直接包含双引号。例如:
print("教’小白’精通编程博客") print(’教"小白"精通编程博客’) print(''' ’教小白精通编程博客’ https://a.hwdong.com python语言 ''')
输出:
教’小白’精通编程博客 教"小白"精通编程博客 '教小白精通编程博客’ https://a.hwdong.com python语言
单引号表示的字符串中不能直接包含单引号,双引号的字符串中也不能直接包含双引号。例如:
print(’教’小白精通编程博客’)#单引号表示的字符串中不能包含单引号
产生如下语法错误:
File "<ipython-input-24-11082e72943d>", line 1 print(’教’小白精通编程博客’) #单引号表示的字符串中不能包含单引号 ^ SyntaxError: invalid syntax
和tuple一样,str类型的对象也是不可修改的(immutable)。例如:
s ='hello world' s[1]='E'
产生“字符串对象不支持赋值”的TypeError(类型错误):
---------------------------------------------------------------------- TypeError Traceback(most recent call last) <ipython-input-1-8616f9d54e50> in <module>() 1 s ='hello world' ----> 2 s[1]='E' TypeError: 'str' object does not support item assignment
2.转义字符
如果要在单引号表示的字符串中包含单引号,则可以在其前面添加反斜杠符号\构成一个单独的字符。例如,用\’表示单引号字符,这种前面加反斜杠字符表示字符’的 \’称为“转义字符”。转义字符表示的是一个字符而不是两个字符。
print('hello \'li ping\'') print(len('hello \'li ping\''))#打印字符串的长度,\’表示的是一个字符
输出:
hello 'li ping' 15
既然反斜杠字符的特殊作用是表示“转义字符”,那么如何表示反斜杠字符呢?办法是在它前面同样加上反斜杠字符,即转义字符\\表示的是单个斜杠字符\。例如:
print('hello \\')
输出:
hello \
转义字符通常可以表示各种不可见的字符,如控制字符。例如,\t表示“制表符”, \n表示“换行符”。因为这些字符是不可见的,所以函数print()在遇到这些字符时会执行特定的动作。例如,对于制表符\t,就输出固定个数的空格,对于换行符\n就换到新的一行。例如:
print('hello\tworld\n') print('ok')
输出:
hello world ok
上例在输出的hello和world之间输出了固定个数的空格,并在换行符处换了一行。
同样可以用下标运算符[]访问字符串的一个或多个连续字符。例如:
s='python programming' print(s[3]) print(s[1:9])
输出:
h ython pr
2.3.5 集合
set是不包含重复元素的无序集合。set是用左右花括号{},包围的,以逗号隔开的一组元素。因为集合无序,所以不能用下标操作其中的元素。例如:
s={2,3, 'python',8} print(type(s)) print(s)
输出:
<class 'set'> {8, 2, 3, 'python'}
set中不能有相同值的元素。例如:
s={1,2,2,3,3,3} print(s)
输出:
{1, 2, 3}
集合是根据其元素的哈希值存储元素的,所以无法计算哈希值的对象不能作为集合的元素。例如,list对象是无法计算哈希值的,所以不能作为集合的元素。例如:
s={2,3, [5,8]} #list是一个无法哈希的数据类型
产生“list不是可哈希的类型”的TypeError(语法错误):
--------------------- TypeError Traceback(most recent call last) <ipython-input-28-54a5e1329f94> in <module>() ----> 1 s={2,3, [5,8]} #list不是可哈希的数据类型 TypeError: unhashable type: 'list'
2.3.6 字典
dict是一个“键-值”对(key-value pairs)的无序集合。
dict中的每个元素都以“键:值(key:value)”的形式存储。例如:
d={1:'value', 'key':2, 'hello':[4,7]} print(type(d)) print(d)
输出:
<class 'dict'> {1: 'value', 'key': 2, 'hello': [4, 7]}
需要通过key(键,也称关键字)才能访问dict中key对应的值(value)。例如:
d['hello']
输出:
[4, 7]
再如:
d[1]
输出:
'value'
总结
● Python的内在数据类型包括int、float、complex、bool, str, list、tuple、set、dict等。
● list对象是可以修改的,而str和tuple等对象是不可修改的。
● 对于有序序列数据类型,如str、list、tuple,可以通过下标访问其中的一个或多个元素,而无序的set则不能用下标访问其中的元素。