一、初识列表
1、列表的理解
变量可以存储一个元素,而列表是一个“大容器”,可以存储n多个元素,程序可以方便的对这些数据进行整体操作,列表相当于其他语言中的数组,列表就相当于一个书包,容纳很多“书本”
列表存储数据的原理:
列表也有自己的id值,列表是一段连续的存储空间存放数据的id值,以得到数据的value值
2、列表的创建
#第一种创建
lst_1 = ['hello','world',98]
#第二种创建方式 使用list函数构建
list_2 = list(['hello','world',98])
3、列表的特点
4、列表生成式
即生成列表的公式,语法格式为:
lst = [i*2 for i in range(1,11)]
print(lst)
二、列表的查询操作
查询操作index()
依次只能检索一个元素
lst = ['hello','world',98,'hello']
#如果列表中有相同元素只返回列表中相同元素的第一个元素的返回值,一旦索引到就会break
print(lst.index('hello'))
#如果索引的目标不在列表里就会报错
'''还可以在指定范围之间查找,设置起始索引位置和终止索引位置'''
print(lst.index(98,1,3)) #在序列为[1,3)检索98
三、获取列表元素
1、获取列表中的单个元素
注意正向索引是从[0,N-1) ,逆向索引是从 [-N,-1)
print(lst[3]) #正向索引 从0~N-1
print(lst[-4]) #逆向索引 从-N~-1
2、获取列表中的多个元素-------切片操作
切片语法格式:
切片的结果: 原列表片段的拷贝,得到一个新的列表
切片的范围: [start,stop)
当step为正数时 从前往后开始切片 :
[:stop:step] ---------->切片的第一个元素默认是列表的第一个元素
[start::step] ---------->切片的最后一个元素默认是列表的最后一个元素
当step为负数时 从后往前开始切片:
[:stop:step] ---------->切片的第一个元素默认是列表的最后个元素
[start::step] ---------->切片的最后一个元素默认是列表的第一个元素
lst_2 = [10,20,30,40,50,60,70,80]
print('原先的列表',id(lst_2))
lst_3 = lst_2[1 : 6 : 2]
print('切片后的列表',id(lst_3)) #列表id值发生改变说明产生了新的列表对象
step为负数时
print(lst_2[::-1]) #step为负数时 逆序输出 lst_2[7::-1]
当start为负数时,表示取最后几个值,因为当它为负数时表示逆向取值从最后一个数(索引为-1)开始取值,而step为正数所以得到的是正序
lst = [10,20,30,40,50,60,70]
lst2 = lst[-4:]
print(lst2)
当stop为负数时,逆向取值,但是start默认为0,也就是从索引为0开始一直到逆序索引为-2的值
lst = [10,20,30,40,50,60,70]
lst2 = lst[:-2]
print(lst2)
连续切片操作
lst = [10,20,30,40,50,60]
lst_1 = lst[:4][:2]
print(lst_1)
相当于lst[:4]=[10,20,30,40]
lst[:4][:2]=[10,20]
切片操作的三个参数可以用表达式
lst = [10,20,30,40,50,60]
lst_1 = lst[1*1:3+3][0:5%2]
print(lst_1)
理论上可以无限次连续切片操作,只要上一次返回的依然是非空可切对象
其他对象的切片操作
(1)元组的切片
a = (1,2,3,4,5,6)[:3] #元组切片操作
print(a)
(2)字符串的切片操作
b = 'ASBJFS'[:3]
print(b)
(3)切片应用
用range函数生成1-20的整数,取3的倍数并输出后四位
for i in range(1,20)[2::3][-4:]:
print(i,end=' ')
3、判断指定元素在列表中是否存在
语法格式:
lst_4 = [10,20,30,40]
print(10 in lst_4) #True
print(20 not in lst_4) #False
4、列表元素的遍历
lst_5 = [10,20,30]
for item in lst_5: #从lst_5中依次取值赋给item并打印输出
print(item)
四、列表增加元素操作
列表增加元素的方法:
1、append():在列表的末尾添加一个元素
lst = [10,20,30]
lst.append(100)
print(lst) #[10, 20, 30, 100],增加后id值没有改变
2、extend(): 在列表的末尾至少添加一个元素
lst = [10,20,30]
lst2 = [60,70,80]
lst.append(lst2) #添加一个元素,将lst2整个作为一个元素插入在末尾
print(lst)
lst.extend(lst2)
print(lst) #将lst2的所有元素依次插入到lst
可以看到append()是直接将lst2整个列表作为一个元素插入lst,而extend()是将lst2中的所有元素依次插入lst中。
3、insert(): 在列表任意位置添加一个元素
lst.insert(2,100) #在索引为2的位置插入100
print(lst)
4、切片: 在列表任意位置至少添加一个元素
lst3 = ['ds',22,80]
lst[1:] = lst3
#从索引为1的位置,没有设置stop默认到最后一个元素,因此从索引为1开始都切除,并插入lst3
print(lst)
若在一个索引位置上插入多个元素只需要设置 lst = [2:2] ,起始索引和终止索引在同一个位置
lst3 = ['ds',22,80]
lst[1:1] = lst3 #设置起始索引与终止索引相同,在该索引位置插入新的元素
print(lst)
五、列表的删除操作
1、remove(): 一次删除一个元素,重复元素只删除第一个,元素不存在则抛出异常
lst = [10,20,30,40,50,30]
lst.remove(30) 第一个30被删除
print(lst)
2、pop(): 删除一个指定索引位置上的元素
lst.pop(1) 索引为一被移除
print(lst)
lst.pop() 默认删除最后一个元素
print(lst)
3、切片: 一次至少删除一个元素
lst2 = [10,20,30,40,50]
new_lst = lst2[1:3]
print(new_lst) 至少删除一个元素,会产生一个新的列表对象
不产生新的列表对象,而是删除原列表中的内容
lst2[1:3] = []
print(lst)
4、clear():清空列表
lst2.clear() 得到一个空列表
print(lst2)
5、del: 删除列表
del lst2
六、列表修改操作
列表元素的修改操作
1、为指定索引的元素赋予一个新值
#一次修改一个值
lst = [10,20,30,40,50]
lst[2] = 200
print(lst)
2、为指定的切片赋予一个新值
#切片替换,索引从1-2替换成[100,200,300,400]
lst[1:3] = [100,200,300,400]
print(lst)
七、总结
1、列表查询方法
index(data,start,stop)
2、列表增加元素的方法
append(data): 在列表的末尾添加一个元素
extend(data): 在列表末尾至少添加一个元素
insert(索引位置,data): 在列表的任意位置添加一个元素
切片: 在列表任意位置至少添加一个元素,相当于替换
3、列表元素删除的方法
remove(data): 一次删除一个元素,重复元素只删除第一个,元素不存在抛出异常
pop(索引位置): 删除指定索引位置上的元素,不指定默认最后一个
切片: 一次至少删除一个元素,若不想产生新的序列,则用一个空列表做替换
clear(): 清空列表
del: 删除列表 del list
八、多功能的切片
切片可以实现列表增加元素的方法
lst3 = ['ds',22,80] 将lst中从索引为1开始全部替换成lst3
lst[1:] = lst3
print(lst)
如果设置stop值则可以实现列表的修改,相当于替换
lst[1:3] = [100,200,300,400]
print(lst)
还可以实现列表元素的删除操作,但会产生一个新的列表
lst2 = [10,20,30,40,50]
new_lst = lst2[1:3]
print(new_lst)
如果想不产生新的列表,仍然在原列表操作,只需用一个空列表替换
lst2[1:3] = []
print(lst)