一、列表
列表是能够存储各种数据的容器。(包括字符串和数字等)
列表是可变的、有序的(下标)
列表的容器符号 [] ,list
1.创建一个空列表
list1 = []
可变 - 增加、删除、修改
1.增加元素
append():追加
insert():插入
list1 = []
list1.append('python')
list1.append('java')
2.下标:python中分正向下标和负向下标
正向下标,从0开始
负向下标:从-1开始
list1.insert(1, 'HTML')
list1.insert(1, 0)
print(list1)
3.修改:通过下标改元素
语法:列表[下标] = 新的值
list1[1] = 'C'
print(list1)
4.删除元素
del:删除某个元素。语法:del 列表[下标]
remove:移除某个元素(彻底删除)
pop:移除某个元素(删除文件后,知道删除的是谁)
clear:将列表清空
del list1[1]
print(list1)
list1.remove('java') # 试试加print
print(list1)
list1.pop(0) # 试试加print
print(list1)
list1.clear()
print(list1)
当我在remove和pop中加print来做对比,区别就很明显
print(list1.remove('java'))
print(list1.pop(0))
显示结果为:
None
python
这样我们就能很明显的看出,remove是彻底删除某个元素,但pop是显出某个元素但是你知道删除的是什么
二、下标
每个元素在列表中的位置
正向下标,从0开始
负向下标,从-1开始(从右往左数)
举例:找海王
list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[2], list1[-2])
需要注意:下标不能越界!!!
比如:
list1[100] # 会报错
list1[-100] # IndexError: list index out of range
三、切片
切片:左闭右开区间,从原来的容器中提取新的容器
切片可以越界
变量[M:N:step]
M:起始范围(不写M,默认从头开始取)
N:结束范围(不写,默认取到尾)
step,步长(step=1,可以不写)
举例:
list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[1:3])
显示:[‘环太平洋’, ‘海王’],到不了3,左闭右开区间
print(list1[1:4:2])
显示:[‘环太平洋’, ‘复仇者联盟’],步长为2
print(list1[:4:2])
显示:[‘蜘蛛侠’, ‘海王’],不写M,默认从头开始取
print(list1[::2])
显示:[‘蜘蛛侠’, ‘海王’],从头到尾每隔2步长
print(list1[:])
显示:[‘蜘蛛侠’, ‘环太平洋’, ‘海王’, ‘复仇者联盟’],将列表原封不动的打印出来
1.起始范围和结束范围不写,但有步长要求时,冒号必须存在;步长不写时,冒号不用存在
2.步长控制获取的元素,每间隔步长1个元素获取一个元素(获取的当前元素+步长=下一个元素)
3.M和N必须同符号:step>0,M<N;step<0,M>N
list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[::-1])
显示:[‘复仇者联盟’, ‘海王’, ‘环太平洋’, ‘蜘蛛侠’],步长为负数,从右往左
print(list1[4:1:-1])
显示:[‘复仇者联盟’, ‘海王’],当步长为负数时,M>N,不论MN是正是负,step<0,M起始位置从右开始
正向坐标和反向坐标可以同时存在
练习:
movies = ['阿甘正传', '肖申克的救赎', '霸王别姬', '三傻大闹宝莱坞', '环太平洋', '猿人泰山']
# a.获取['阿甘正传'、'霸王别姬'、'环太平洋']
print(movies[::2])
# b.获取['肖申克的救赎'、'环太平洋']
print(movies[1:6:3])
print(movies[1:-1:3])
# c.获取['环太平洋'、'霸王别姬'、'阿甘正传']
print(movies[-2::-2])
# d.获取['猿人泰山'、'阿甘正传']
print(movies[::-5])
# e.获取['霸王别姬']
print(movies[2:3])
a = []
a.append(movies[2])
print(a)
b = [movies[2]]
print(b)
四、列表的遍历
1.直接遍历
2.间接遍历
3.enumerate():将列表转换为一个可迭代对象
1.直接遍历
for i in movies:
print(i)
2.间接遍历
len()能够查看容器的长度
print(len(movies))
for i in range(len(movies)):
print(movies[i])
3.enumerate()
将列表转换为一个可迭代对象
print(enumerate(movies))
for i in enumerate(movies):
print(i)
显示效果为:
<enumerate object at 0x0000024077C1DE00>
(0, '阿甘正传')
(1, '肖申克的救赎')
(2, '霸王别姬')
(3, '三傻大闹宝莱坞')
(4, '环太平洋')
(5, '猿人泰山')
综合练习
题目:将下方列表中的元素从小到大排序。
list1 = [23, 56, 10, 55, 76, 100, 30]
两个数先比较,比较出大的那个数,之后大的数再与下一个数比较,重复此操作
[23, 56, 10, 55, 76, 100, 30] [23, 10, 55, 56, 76, 30, 100] [10, 23, 55, 56, 30, 76, 100]
每趟排序,排序次数 + 1 = 本趟排序的元素个数
外层循环控制趟数,内层循环控制每趟中俩个数的比较
# 外层循环控制趟数
for i in range(1, len(list1)):
print(f'这是第{i}趟排序')
print('每趟排序开始前:', list1)
for j in range(0, len(list1) - i):
print('每次排序的两个元素', list1[j], list1[j + 1])
if list1[j] > list1[j + 1]:
list1[j], list1[j + 1] = list1[j + 1], list1[j] # 当前者大于后者转换
# 打印每一趟排序的结果
print(list1)