序列概述
- 1、python的序列
- 1、数据结构
- 2、序列
- 3、列表和元组的区别
- 4、容器
- 5、通用的序列操作
- 1、索引
- 2、切片
- 3、序列相加
- 4、序列乘法
- 5、成员资格
- 6、长度和最值
1、python的序列
1、数据结构
首先要了解数据结构的概念:以某种方式(如编号)组合起来的数据元素集合。
2、序列
在python中最基本的数据结构就是序列。序列中每个元素都有编号,即其位置或索引,第一个元素的索引为0,第二个索引为1,以此类推。
最常用的序列包含列表、元组、字符串。
3、列表和元组的区别
列表和元组的区别在于:列表是可以修改的,而元组不可以,这意味着列表适用于需要中途添加元素的情形,而元组适用于需要禁止修改序列的情形。
编程时基本上所有情况都可以用列表来代替元组,有一种例外是:将元组用作字典键,这种情况下不能用列表来代替元组,因为字典是不允许修改的。
4、容器
python支持一种数据结构的基本概念,叫做**“容器”,容器基本上就是可以包含其他对象的对象。
两种主要的容器就是序列(表、元组)和映射(字典)。序列中每个元素都有编号**,映射中每个元素都有名称(键)。
还有一种既不是序列也不是映射的容器叫做**“集合”**。
5、通用的序列操作
几种操作适用于所有的序列,包括索引、切片、相加、相乘、成员资格检查。
还提供了一些内置函数,可用于确定序列长度以及找出序列中最大和最小的元素。
还有一个重要操作叫迭代,用于对序列中的每个元素都执行特定的操作,讲循环的时候再说。
1、索引
序列中所有元素都有编号,从0开始递增。
greeting = 'Hello,hehe'print(greeting[0])
执行结果:
HProcess finished with exit code 0
注:python没有字符类型,一个字符就是只包含一个元素的字符串。
上面的这种操作叫做“索引”,可用索引获取元素。索引还可以是负数,即从右往左,-1是最后一个元素的位置:
greeting = 'Hello,hehe'print(greeting[-1])
执行结果:
eProcess finished with exit code 0
如果函数调用返回一个序列,可直接进行索引操作:
>>> a = input("input something:")[2]input something:abcde>>> a'c'
2、切片
切片用于访问特定范围内的元素。操作是使用两个索引,并用冒号分隔:
>>> greeting = 'Hello,hehe'>>> greeting[2:4]'ll'
注意一个原则“顾前不顾后”,即切片的终点不包含在切片内,而起点包含在切片内。
当然索引也可以是负数:
>>> n = [1,2,3,4,5,6,7,8,9,10]>>> n[-3:-1][8, 9]
如果想让10也在切片内怎么办呢?
肯定不能是[-3:0],因为会返回空序列 。在执行切片操作时,如果第一个索引位于第二个索引指定的元素后面,结果就会为空序列。办法是用一种简写:
>>> n[-3:][8, 9, 10]
如果切片的结束位于序列末尾,可以省略第二个索引。
同样,如果切片始于序列的开头,可以省略第一个索引:
>>> n[:3][1, 2, 3]
如果要复制整个序列,可以省略两个索引:
>>> n[:][1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
另外还可以设置切片的步长:
普通切片中步长为1,如果想每3个元素提取1个,可以设置步长为4:
>>> n[::4][1, 5, 9]
步长不能为0,否则无法移动,但步长可以为负数,即从右向左移动:
>>> n[::-1][10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
要正确的得到想要的元素,切片操作颇费脑筋。
3、序列相加
就是用“+”来对两个序列进行拼接:
>>> [1,2,3]+[4,5,6][1, 2, 3, 4, 5, 6]>>> "hello"+"world"'helloworld'>>> [1,2,3]+"hello"Traceback (most recent call last): File "", line 1, in [1,2,3]+"hello"TypeError: can only concatenate list (not "str") to list
上述可见,虽然字符串和列表都是序列,但是不同类型的序列不能进行拼接。
4、序列乘法
说的是序列和数字相乘,这会重复这个序列n次,创建一个新序列:
>>> "hi"*5'hihihihihi'
>>> [15]*10[15, 15, 15, 15, 15, 15, 15, 15, 15, 15]
这种情况可以用于初始化一个包含10个元素的序列:
>>> s = [None]>>> s*10[None, None, None, None, None, None, None, None, None, None]
注意None的写法,不要写成别的东西,None在python中表示“什么都没有”。
>>> s=[none]Traceback (most recent call last): File "", line 1, in s=[none]NameError: name 'none' is not defined>>> s=[NONE]Traceback (most recent call last): File " ", line 1, in s=[NONE]NameError: name 'NONE' is not defined
5、成员资格
就是用来判断特定的值是否包含在序列内,运算符为“in”。
>>> n = [1,2,3]>>> 1 in nTrue>>> 6 in nFalse
满足时返回Ture,不满足返回False,这样的运算符叫做"布尔运算符",而Ture和False叫做“布尔值”。
>>> w = "word">>> r in wTraceback (most recent call last): File "", line 1, in r in wNameError: name 'r' is not defined>>> "r" in wTrue
上面的例子要注意字符串的写法。
6、长度和最值
长度:len,最大值:max,最小值:min
这些都是内置函数。
>>> n=[1,2,3]>>> len(n)3>>> max(n)3>>> min(n)1
max、min不光可以传序列,还可以直接传数,但是不能只传一个数:
>>> max(1,2)2>>> min(1,2,3)1>>> min(123)Traceback (most recent call last): File "", line 1, in min(123)TypeError: 'int' object is not iterable
len传的一定是个序列,如果是一个数会报错:
>>> len(1)Traceback (most recent call last): File "", line 1, in len(1)TypeError: object of type 'int' has no len()>>> len("1")1
结束。