Python列表
一、列表
(一)列表
是能够存储各种数据的容器;列表可变;列表有序(下标)。
列表的容器符号[],list。
(二)列表可变
首先创建一个空列表
list1 = []
结果输出:
[]
1.增加元素
(1)append(): 追加
代码:
list1 = []
print(list1)
list1.append('Python')
print(list1)
list1.append('Java')
print(list1)
输出结果:
[]
[‘Python’]
[‘Python’, ‘Java’]
(2)insert( index, obj ): 插入
代码:
list1 = ['Python', 'Java']
list1.insert(1, 'HTML') #在下标为1的位置插入'HTML'
print(list1)
list1.insert(1, 0) #在下标为1的位置插入0
print(list1)
输出结果:
[‘Python’, ‘HTML’, ‘Java’]
[‘Python’, 0, ‘HTML’, ‘Java’]
index: 插入位置下标
obj: 插入元素
2.修改元素
通过下标修改元素
语法:列表[下标] = 新的值
代码示例:
list1 = ['Python', 0, 'HTML', 'Java']
list1[1] = 'C'
print(list1)
输出结果:
[‘Python’, ‘C’, ‘HTML’, ‘Java’]
3.删除元素
(1)del:删除某个元素
语法:del 列表[下标]
代码示例:
list1 = ['Python', 'C', 'HTML', 'Java']
del list1[1]
print(list1)
输出结果:
[‘Python’, ‘HTML’, ‘Java’]
(2)remove(obj):移除某个元素(彻底删除)
代码示例:
list1 = ['Python', 'HTML', 'Java']
# 删除的元素没了
print(list1.remove('Java')) # None
print(list1)
输出结果:
None
[‘Python’, ‘HTML’]
(3)pop:移除某个元素(删除元素后知道删除的是谁)
代码示例:
list1 = ['Python', 'HTML']
# 删除的元素暂存
print(list1.pop(0)) # Python这个元素虽然被移除了,但是会记得删除 # 的是python
print(list1)
输出结果:
Python
[‘HTML’]
(4)clear:将列表清空
代码示例:
list1 = ['HTML']
list1.clear()
print(list1)
输出结果:
[]
(三)列表有序(下标)
下标:每个元素在列表中的位置。
1.正向下标:从0开始
2.负向下标:从-1开始
1.2.的代码示例:
list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
# 海王
print(list1[2], list1[-2])
输出结果:
海王 海王
下标为2和-2获取的是同一个元素。
3.下标不能越界
如果越界会输出:
IndexError: list index out of range
(四)切片
1.定义
切片:左闭右开区间,从原来的容器中提取元素组成新的容器。
注意:切片可以越界。超出部分获取不到元素。
代码示例:
list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[1:6])
输出结果:
[‘环太平洋’, ‘海王’, ‘复仇者联盟’]
2.语法
变量[M:N:step]
M:起始范围(不写M,默认从头开始取)。
N:结束范围(不写N,默认取到尾)。
step:步长(step = 1,可以不写)。
代码示例:
list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[1:3]) # 下标为1,2
print(list1[1:4:2]) # 下标为1,3
print(list1[:4:2]) # 从头到4间隔2取
print(list1[::2]) # 从头到尾间隔2取
print(list1[:]) # 从头取到尾
输出结果:
[‘环太平洋’, ‘海王’]
[‘环太平洋’, ‘复仇者联盟’]
[‘蜘蛛侠’, ‘海王’]
[‘蜘蛛侠’, ‘海王’]
[‘蜘蛛侠’, ‘环太平洋’, ‘海王’, ‘复仇者联盟’]
3.使用切片时应注意
(1)起始范围和结束范围不写时:冒号必须存在;
步长不写时:冒号不用写。
(2)步长控制获取的元素,每间隔步长-1个元素获取元素。
(获取的当前元素下标+步长=下一个要获取的元素下标)
代码示例:
list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[::-1]) # 倒序输出列表
print(list1[4:1:-1]) # 输出3,2
输出结果:
[‘复仇者联盟’, ‘海王’, ‘环太平洋’, ‘蜘蛛侠’]
[‘复仇者联盟’, ‘海王’]
(3)M和N同号时:step>0,M<N; step<0,M>N。
(4)M和N异号时:正向下标和负向下标可以组合使用。
代码示例:
list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[0:-1]) # 从头取到尾,0,1,2 ,-1不取
输出结果:
[‘蜘蛛侠’, ‘环太平洋’, ‘海王’]
4.切片小练习
# 练习:
movies = ['阿甘正传', '肖申克的救赎', '霸王别姬', '三傻大闹宝莱坞', '环太平洋', '猿人泰山']
# a.获取['阿甘正传'、'霸王别姬'、'环太平洋']
print(movies[::2])
# b.获取['肖申克的救赎'、'环太平洋']
print(movies[1::3])
# c.获取['环太平洋'、'霸王别姬'、'阿甘正传']
print(movies[-2::-2])
# d.获取['猿人泰山'、'阿甘正传']
print(movies[::-5])
# e.获取['霸王别姬'] 3种方法
print(movies[2:3]) # 1
a = []
a.append(movies[2])
print(a) # 2
print([movies[2]]) # 3
输出结果:
[‘阿甘正传’, ‘霸王别姬’, ‘环太平洋’]
[‘肖申克的救赎’, ‘环太平洋’]
[‘环太平洋’, ‘霸王别姬’, ‘阿甘正传’]
[‘猿人泰山’, ‘阿甘正传’]
[‘霸王别姬’]
[‘霸王别姬’]
[‘霸王别姬’]
(五)列表的遍历
1.直接遍历
代码:
movies = ['阿甘正传', '肖申克的救赎', '霸王别姬', '三傻大闹宝莱坞', '环太平洋', '猿人泰山']
# 1.直接遍历
for i in movies:
print(i)
输出结果:
阿甘正传
肖申克的救赎
霸王别姬
三傻大闹宝莱坞
环太平洋
猿人泰山
2.间接遍历-借助下标
len()能够查看容器的长度
代码:
movies = ['阿甘正传', '肖申克的救赎', '霸王别姬', '三傻大闹宝莱坞', '环太平洋', '猿人泰山']
# 间接遍历-借助下标
# len()能够查看容器的长度
print(len(movies))
for i in range(len(movies)):
print(movies[i])
输出结果:
6
阿甘正传
肖申克的救赎
霸王别姬
三傻大闹宝莱坞
环太平洋
猿人泰山
3.enumerate(列表名字)
将列表转换为一个可迭代的对象(可用for循环),取出下标和元素
代码:
# 3.enumerate(列表名字):将列表转换为一个可迭代对象(能使用for循环) 取出下标和元素
movies = ['阿甘正传', '肖申克的救赎', '霸王别姬', '三傻大闹宝莱坞', '环太平洋', '猿人泰山']
print(enumerate(movies))
for i in enumerate(movies):
print(i)
输出结果:
<enumerate object at 0x0000018A7C95E598>
(0, ‘阿甘正传’)
(1, ‘肖申克的救赎’)
(2, ‘霸王别姬’)
(3, ‘三傻大闹宝莱坞’)
(4, ‘环太平洋’)
(5, ‘猿人泰山’)
4.练习:冒泡排序将列表中元素从小到大排列
基本思想:用两层循环,第一层循环控制趟数,每次选出最大的元素放在最后面。
第二层循环控制需要比较的元素。
每趟排序中,排序次数 + 1 = 本趟排序的元素个数。
代码:
list = [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(list)):
# 作比较的元素
print(f'这是第{i}趟排序')
print('每次排序开始前:', list)
for j in range(0, len(list) - i):
print('每次排序取得两个元素', list[j], list[j+1])
if list[j] > list[j + 1]:
list[j], list[j + 1] = list[j + 1], list[j]
# 打印每一次排序的结果
print(list)
输出结果:
这是第1趟排序
每次排序开始前: [23, 56, 10, 55, 76, 100, 30]
每次排序取得两个元素 23 56
[23, 56, 10, 55, 76, 100, 30]
每次排序取得两个元素 56 10
[23, 10, 56, 55, 76, 100, 30]
每次排序取得两个元素 56 55
[23, 10, 55, 56, 76, 100, 30]
每次排序取得两个元素 56 76
[23, 10, 55, 56, 76, 100, 30]
每次排序取得两个元素 76 100
[23, 10, 55, 56, 76, 100, 30]
每次排序取得两个元素 100 30
[23, 10, 55, 56, 76, 30, 100]
这是第2趟排序
每次排序开始前: [23, 10, 55, 56, 76, 30, 100]
每次排序取得两个元素 23 10
[10, 23, 55, 56, 76, 30, 100]
每次排序取得两个元素 23 55
[10, 23, 55, 56, 76, 30, 100]
每次排序取得两个元素 55 56
[10, 23, 55, 56, 76, 30, 100]
每次排序取得两个元素 56 76
[10, 23, 55, 56, 76, 30, 100]
每次排序取得两个元素 76 30
[10, 23, 55, 56, 30, 76, 100]
这是第3趟排序
每次排序开始前: [10, 23, 55, 56, 30, 76, 100]
每次排序取得两个元素 10 23
[10, 23, 55, 56, 30, 76, 100]
每次排序取得两个元素 23 55
[10, 23, 55, 56, 30, 76, 100]
每次排序取得两个元素 55 56
[10, 23, 55, 56, 30, 76, 100]
每次排序取得两个元素 56 30
[10, 23, 55, 30, 56, 76, 100]
这是第4趟排序
每次排序开始前: [10, 23, 55, 30, 56, 76, 100]
每次排序取得两个元素 10 23
[10, 23, 55, 30, 56, 76, 100]
每次排序取得两个元素 23 55
[10, 23, 55, 30, 56, 76, 100]
每次排序取得两个元素 55 30
[10, 23, 30, 55, 56, 76, 100]
这是第5趟排序
每次排序开始前: [10, 23, 30, 55, 56, 76, 100]
每次排序取得两个元素 10 23
[10, 23, 30, 55, 56, 76, 100]
每次排序取得两个元素 23 30
[10, 23, 30, 55, 56, 76, 100]
这是第6趟排序
每次排序开始前: [10, 23, 30, 55, 56, 76, 100]
每次排序取得两个元素 10 23
[10, 23, 30, 55, 56, 76, 100]
最终列表从小到大排列为:[10, 23, 30, 55, 56, 76, 100]