序列型数据
有序的序列:字符产、列表、元组
有序列表的通用操作:
- 索引、分片、加、乘
- 检查是否属于序列
- 长度、最大、最小
无序列表:集合、字典
列表
列表创建:方括号+逗号
列表元素:
包含任意种类的对象元素,如:数字、字符串、自定义 对象、列表本身
有序:从左到右的位置顺序
可修改:长度可变,元素可以修改
通用序列操作
一、索引:
运用元素的序号,访问一个元素。从左往右,第一个元素的序号为0,到n-1;从右往左,第一个元素的序号是-1,到-n
二、切片:
- 用于访问特定范围内的元素,用法为num[a : b : c],a是切片开始的元素编号,包括a;b是切片结束后剩下的第一个元素编号,相当于不包括b;c是切片访问的步长
- 当c>0时,相当于从左往右进行访问,此时需满足a<=b;当c<0时,相当于从右往左进行访问,此时需满足a>=b。特别的,当a==b时,此时访问的元素为空,但是可以进行一些其他的操作,这个在后面会提到
- num[ a : b ]此时默认步长为1;num[ : b ]此时默认从头开始访问;num[ a : ]此时默认从a开始访问到列表最后一个元素;num[ : ]此时默认从头访问到尾;a、b既可用正数也可以用负数,只需要符合相应的大小关系即可
>>> num=[1,2,3,4,5,6]
>>> print(num[0:4:2])
[1, 3]
>>> print(num[0:])
[1, 2, 3, 4, 5, 6]
>>> print(num[::2])
[1, 3, 5]
>>> print(num[5:0:-2])
[6, 4, 2]
>>> print(num[1:1])
[]
>>> print(num[1:-1])
[2, 3, 4, 5]
三、序列相加
可以用加号来拼接序列,但是仅限于相同类型的序列,例如列表+列表,但不能列表+字符串
四、乘法
将序列与数x相乘时,将重复这个序列x次,然后创建一个新的序列。
此方法的一大用处时用来初始化列表,类似于c++中的定义一个数组。我们知道[None]代表一个空列表,那么我们将[None]乘上一定次数,就可以初始化一个列表了
a=[None]*1200 #这样我们就初始化了一个可以存1200个元素的列表
五、成员资格
检验特定的值是否包含在序列中,可以用运算符in。不同于前面提到的运算符,in运算符检查完之后,会返回一个布尔值,即True或False。
内置函数len(),max(),min()可以直接用于计算列表所包含的元素个数。在元素种类相同的情况下,max(),min(),可以返回最大、最小的元素。特别注意的是:对于字符串,从首位开始逐位比较ascii码的大小。除此以外,max(),min()可以直接用于一些数的比较大小
>>> print("abcd">"abc")
True
>>> print("aacd">"abc")
False
>>> print("abcdee">"z")
False
>>> max("b","abd") # min()同样
'b'
>>> max(2,3,543,2345)
2345
六、基本的列表操作
- 修改列表:给元素赋值,用索引就可以给特定位置的元素赋值,ex: num[2]=2
- 删除元素: 可以用del num[i] 删除序号为i的元素;用del num[i:j]删除序号从i到j-1的元素
- 给切片赋值:访问切片的方法上文已经提到了,切片赋值的功能非常强大。可以同时给多个元素赋值,也可以插入新的元素,也可以删除原列表中的元素,还可以用于在原列表最后加上一段新的列表,只需用num[len(num) : ]=[ , ] 即可
>>> num=[1,2,3,4,5,6]
>>> num[1:3]=[7,8] # 进行赋值修改
>>> print(num)
[1, 7, 8, 4, 5, 6]
>>> num[::2]=[10,11,12] #以2为步长来进行修改
>>> print(num)
[10, 7, 11, 4, 12, 6]
>>> num[-1:1:-1]=[-1,-2,-3,-4] #从最后一位开始进行修改
>>> print(num)
[10, 7, -4, -3, -2, -1]
>>> num[1:1]=[1234] #用一个新的序列代替那个位置的空切片
> #相当于添加了一个元素
>>> print(num)
[10, 1234, 7, -4, -3, -2, -1]
>>> num[:3]=[] #相当于删除对应位置的元素
>>> print(num)
[-4, -3, -2, -1]
七、列表方法
- append():将一个对象附加到列表的末尾,注意此操作无返回值,只修改列表
- clear():就地清空列表的内容
- copy():复制一个列表。常规的复制,只是将一个另一个名称关联到列表,两者的改变实际上还是一致的。用copy()则可以避免这个问题的发生,它是将一个列表关联到另一个列表的副本,两者的变化不会相互影响
>>> a=[1,2,3]
>>> b=a
>>> b[1]=4
>>> print(a)
[1, 4, 3]
>>> a=[1,2,3]
>>> c=a.copy()
>>> c[1]=4
>>> print(a)
[1, 2, 3]
>>> print(c)
[1, 4, 3]
- count():计算指定元素在列表中出现的次数
- extend():将多个值附加到列表的尾部,返回的是被修改后的列表,这点与“加法”不同,除非专门复制,不会改变原列表的值。可以用切片达到同样的效果
- index(),在列表中查找指定值第一次出现的索引
- insert(),将一个指定值插入列表。insert(i,x)将x插入到序号为i的位置。同样,可以用切片达到同样的效果
- pop(),从列表中删除一个元素,并返回这一个元素。pop是唯一既可以修改列表有返回一个非None的列表方法。通过使用pop()和append()我们也可以将列表变成一个栈(后进后出)或队列(先进先出)
- remove(),删除第一个为指定值的元素,无返回值
- reverse() ,按相反顺序排列列表中的元素,无返回值
- sort(),对列表进行就地排序,对原列表进行修改,无返回值。实际上这个函数可以用于任何一个序列,但是返回值总是一个列表