python基础4-列表

列表的创建与删除
列表可以存储多个不同类型的变量(对象)
创建
两种方式:
- 使用中括号:
lst=[元素1,元素2]
- 使用内置函数:
lst=list([元素1,元素2])
列表的特点
- 列表元素按顺序有序排列
- 索引指向唯一一个数据
- 列表可以存储重复数据
- 可存储任意数据类型
- 根据需要动态分配和回收内存:即不用担心储存数据过多空间不足的情况。
列表的查询操作
获取列表指定元素的索引:使用函数index():
lst=[...., ..., ...]
print(lst.index(...))
注意:
- 当列表有两个重复元素时,只返回第一个元素的索引
- 若查询的元素不在列表中时,出现错误提示:“ValueError”
- 可以在指定的start和stop之间进行查找
例:
#创建列表的方式1:使用方括号
lst1=['hello','world',100,55.4,'hello']
#创建列表的方式2:使用内置函数list
lst2=list(['hello','world',100,55.4,'hello'])
print(lst2.index('hello'))
#print(lst2.index('你好')) #ValueError: '你好' is not in list
print(lst2.index('hello',1,5)) #查找范围的索引为1-5,不包括5
运行结果:0,4
获取列表的单个元素
lst[索引数]
获取列表的多个元素
使用切片操作列表名[start : stop : step]
- 切片结果:原列表片的拷贝
- 切片范围:[start,stop)
- step默认为1
- step:
(1)step为正数时:从start开始向后计算切片
[:stop:step] 切片的第一个元素为列表的第一个元素
[start::step] 切片的最后一个元素为列表的最后一个元素
(2)step为负数时:从stop开始向前计算切片
[:stop:step] 切片的第一个元素为列表的最后一个元素
[start::step] 切片的最后一个元素为列表的第一个元素
lst=[10,20,30,40,50,60,70,80,90]
print(lst[1:7])#默认步长为1
print(lst[1:7:2])#start=1,stop=7,step=2
print(lst[:7:2])#start默认为0,stop=7,step=2
print(lst[1::2])#start=1,stop默认为最后一个,step=2
print('原列表',lst)
print(lst[::-1])
print(lst[7::1])
print(lst[7::-1])
print(lst[7::-2])
运行结果:
[20, 30, 40, 50, 60, 70]
[20, 40, 60]
[10, 30, 50, 70]
[20, 40, 60, 80]
原列表 [10, 20, 30, 40, 50, 60, 70, 80, 90]
[90, 80, 70, 60, 50, 40, 30, 20, 10]
[80, 90]
[80, 70, 60, 50, 40, 30, 20, 10]
[80, 60, 40, 20]
判定指定元素在列表中是否存在
元素 in 列表名
元素 not in 列表名
lst=[10,20,30,40,50,60,70,80,90]
print(10 in lst) #Ture
print(100 not in lst)#Ture
列表元素的遍历
for 迭代变量 in 列表名:
....
print(' ------------列表的遍历-----------')
lst=['hello','world',100,55.4,'hello']
for item in lst:
print(item)
运行结果:
列表的增、删、改
增加操作
- append():在列表末尾添加一个元素
- extend():在列表的末尾添加至少一个元素
- insert():在列表任意位置添加一个元素
- 切片:在列表任意位置添加至少一个元素
# 列表末尾添加一个元素
lst=[10,20]
lst1=['hello','world',100]
print(lst,id(lst))#[10, 20] 1567945602688
lst.append(100)
print(lst,id(lst))#[10, 20, 100] 1567945602688
#lst.append(lst1)#[10, 20, 100, ['hello', 'world', 100]]
#列表末尾添加多个元素
lst.extend(lst1)#[10, 20, 100, 'hello', 'world', 100]
print(lst)
#在任意位置添加一个元素
lst1.insert(1,0)#['hello', 0, 'world', 100]
print(lst1)
#在任意位置添加多个元素
lst=[10,20,30,40,50]
lst3=[1,2,3]
lst[1:]=lst3#吧lst中位置1-4切掉,把lst3的内容放在切掉的位置上
print(lst)#[10, 1, 2, 3]
删除操作
- remove():一次删除1个元素
若有重复元素,只删除第一个
要删除的元素不存在:报错VauleError - pop():删除指定索引位置上的一个元素
不指定索引时,默认删除列表最后一个元素
指定索引不存在:报错IndexError - 切片:一次删除至少1个元素
- clear():清空列表
- del:删除列表
lst=[10,20,30,40,50,10]
lst.remove(10)#删除10,有两个10,默认删除第一个10
print(lst)#[20, 30, 40, 50, 10]
lst.pop(1)#删除索引1上的元素
print(lst)#[20, 40, 50, 10]
print('--------------切片操作,至少删除1个元素,将产生一个新的列表对象---------')
print('原列表',lst)
new_lst=lst[1:3]#把原列表中的40,50切走并将其赋予新的列表中,即输出结果为切掉的元素
print('切片后列表',new_lst)#[40,50]
print('--------------切片操作,不产生新的列表对象,只删除列表元素---------')
lst=[20, 40, 50, 10]
lst[1:3]=[]#用空元素代替切掉的元素40,50,即输出结果为切除后列表的剩余元素。
print(lst)#[20,10]
#清空列表元素
lst.clear()
print(lst)
#删除列表对象
del lst
print(lst)
运行结果:
修改操作
- 为指定索引元素赋予一个新值
- 为指定切片赋予新值
lst=[1,2,3,4]
lst[2]=10#[1, 2, 10, 4]
print(lst)
lst[1:3]=[200,300,500]# [1, 200, 300, 500, 4]
print(lst)
列表的排序操作
-调用sort():列表中所有元素默认按从小到大顺序排列(升序),可以指定reverse=True 进行降序排序
- 调用sorted():可以指定reverse=True进行降序排序,原列表不改变
print('-------使用sort()函数,不产生新列表对象----------------')
lst=[10,50,30,2,9]
print('原列表',lst,id(lst))
#调用sort(),默认升序排序
lst.sort()
print('排序后的列表,升序',lst,id(lst))
#指定关键字参数,降序排序
lst.sort(reverse=True)#reverse=True表示升序排序;reverse=False表示降序,reverse不指定则默认为False(降序)
print('排序后的列表,降序',lst,id(lst))
print('-------使用sorted()函数,产生新列表对象----------------')
lst=[10,50,30,2,9]
print('原列表',lst,id(lst))
#排序
new_list=sorted(lst)
print('排序后的列表,升序',new_list,id(new_list))
new_list=sorted(lst,reverse=True)
print('排序后的列表,升序',new_list,id(new_list))
列表生成式(生成列表的公式)
语法:列表名=[i*i for i in range(1,10)]
i:自定义变量;i*i:列表元素的表达式
将整数1-9以i*i的结果储存在列表中
lst=list(range(1,10))#[1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lst)
lst=[i for i in range(1,10)]#[1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lst)
lst=[2*i for i in range(1,10)]#[2, 4, 6, 8, 10, 12, 14, 16, 18]
print(lst)