数据结构之列表
1.序列(sequence)
1.1基本概念
- 序列是Python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引。
- 数据结构指计算机中数据存储的方式。
1.2序列的分类
- 可变序列(可以通过赋值的方式改变序列中的元素):例如 列表(list) 字典(dict)
- 不可变序列(序列中的元素不能改变):例如 字符串(str) 元组(tuple)
2.列表
- 列表是Python中的一个对象
- 列表的基本作用
1.用来保存多个有序的数据
2.列表是用来存储对象的对象
2.1列表的运用
- 创建列表:[]创建一个空列表
s=[]#创建的空列表
lst=[1,‘java’,None,max(1,2,3)]#列表可以保存任意对象
我们可以通过索引来获取列表中的元素
lst=[1,2,3,4,5,6]
print(lst[0])#获取第一个元素
print(lst[6])#超出范围
print(lst[-1])#获取最后一个元素,-2表示倒数第二个元素
- 列表的长度为列表最大索引值加1
2.2切片
- 切片是指从现有列表中获得一个子列表,这是一个新的列表,对原来的列表不产生影响。
- 通过切片来获取指定的元素
- 语法:列表[起始:结束:步长]
- 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
lst=[10,20,30,50,40]
print(lst[0:2])#输出前两个数字,不会输出第三个
输出:[10,20]
- 起始位置和结束位置的索引可以不写
- 如果省略结束位置,则会从当前的开始位置一直截取到最后
print(lst[1:])
输出:[20,30,50,40]
- 如果省略开始位置。则会从第一个元素截取到结束的元素,但是不包括结束的元素
print(lst[:3])
输出:[10,20,30]
- 如果开始位置和结束位置都省略,则会从第一个元素开始截取到最后一个元素
print(lst[:])
输出:[10,20,30,50,40]
- 步长表示每次获取元素的间隔,默认是1(可以省略不写)
- 步长不能是0,但是可以为负数
print(lst[0:4:2])
输出:[10,30]
print(lst[0:2:-1])
输出:[] 空列表
print(lst[4:0:-1])
输出:[40,50,30,20]
print(lst[::-1])
输出:[40,50,30,20,10]反过来输出
3.通用操作
- +和*
- +可以将两个列表拼接成一个列表
lst=[1,2,3]+[4,5,6]
print(lst)
输出:[1,2,3,4,5,6]
- *可以将列表重复指定的次数(注意2个列表不能做乘法,要和整数做乘法运算
lst = [1,2,3] * [4,5,6]
print(lst)
#TypeError: can’t multiply sequence by non-int of type ‘list’
lst=[1,2,3]*2
print(lst)
输出:[1,2,3,1,2,3]
- in 和 not in
- in用来检查指定元素是否在列表当中
print(10 in lst)
#在就返回True
- not in用来检查元素是否不在列表中
- len()获取列表中元素的个数
print(len(lst))
6
- max()获取列表中最大值
- min()获取列表中最小值
- list.index(x,[,start[,end]])
lst=[10,20,30,10,20,30]
lst.(index(10))
输出:10在列表中的位置(默认获取第一个)
print(lst.index(10,2,5))#2,5表示指定的范围内
- 第一个参数 获取指定元素在列表中的位置
- 第二个参数 表示查找的起始位置
- 第三个参数 表示查找的结束位置
函数和方法的区别
xxx() 函数(function)
例如:len()
xxx.yyy() 方法 比较特殊的函数(method)
例如:lst.index()
- list.count(x)统计指定元素在列表中出现的个数
print(lst.coint(10))
输出:2
4.修改列表
- 切片修改(起始就是给切片的内容重新赋值,但是赋值的内容必须是一个序列)
lst=[1,2,3,4,5,6]
lst[0]=9
print(lst)
输出[9,2,3,4,5,6]
- 当设置了步长时,序列中元素的个数必须和切片元素中的个数保持一致
lst[0:3]=‘1234’
print(lst)
输出:[‘1’,‘2’,‘3’,‘4’,4,5,6]
- 通过切片来删除元素
- del list[起始:结束]关键字
del list[1]
print(lst)
输出:[1,3,4,5,6]
- list=[ ]
lst[0:3]=[]
输出:[4,5,6]
- 类型转化
s=‘adafdfs’
k=list(s)
print(k)
输出:[‘a’,‘d’,‘a’,‘f’,‘d’,‘f’,‘s’]
5.列表的常用方法
- s.append()向列表的最后添加一个元素
lst.append(33)
输出:[1,2,3,4,5,6,33]
- s.insert(arg1,arg2)向列表指定位置插入一个元素(参数1:要插入的位置 参数2:要插入的元素)
lst.insert(0,33)
输出:[33,1,2,3,4,5,6]
- s.extend()使用一个新的序列来扩展当前序列(它会将该序列中的元素添加到列表中)参数需要传递一个序列
lst.extend([3,4])
输出:[1,2,3,4,5,6,3,4]<==>lst+=[3,4]
- s.pop()根据索引删除并返回指定元素
s=lst.pop(3)
print(s)
输出:4 #不传递索引则默认删除最后一个
- s.remove()删除指定元素(如果相同值的元素有多个,只会删除第一个)没有返回值
s=lst.remove(3)
print(s)
输出:None
print(lst)
输出:[1,2,3,5,6]
- s.reverse()翻转列表
lst.reverse()
print(lst)
输出:[6,5,4,3,2,1]
- s.sort(key=None,reverse=False)用来对列表中的元素进行排序 reverse:True反序(降序);False 正序(升序)
lst.sort(reverse=True)
print(lst)
输出:[6,5,4,3,2,1]
6.遍历列表
6.1for循环
- 通过for循环来遍历列表
语法
for 变量 in 序列(遍历的规则):
代码块
- 注:for循环的代码块会执行多次,序列中有几个元素就会执行几次。每执行一次就会将序列中的一个元素赋值给变量,所以我们可以通过变量来获取列表中的元素
6.2range(start,stop[,step])
参数说明
- start:计数从start开始。默认从0开始。
range(5)<==>range(0,5);
- stop:计数到stop结束,但不包括stop。
range(0,5)<==>[0,1,2,3,4]不包括5
- step:步长,默认为1。
range(0,5)<==>range(0,5,1)