列表的相关用法
一、列表切片
- 切片 — 获取部分元素
切片的结果是列表 — 原列表的一部分
'''
语法:
列表[开始下标:结束下标:步长]
说明:
开始下标 -- 下标值(0开始的和 -1开始的都行);确定切片有效范围的起点,可以取到
: - 固定写法
结束下标 -- 下标值(0开始的和 -1开始的都行);确定切片有效范围的终点,取不到
步长 - 1)决定切片的方向(步长对应的方向必须和开始到结束的方向一致,否则切片结果为空)
2)绝对获取元素的方向(一个的一个的取还是跳着取)
注:切片的有效范围是:[开始下标,结束下标)
'''
games = ['王者荣耀','和平精英','生化危机','原神','诛仙','穿越火线','部落冲突','红警','魂斗罗']
print(games[1:5:1]) #['和平精英', '生化危机', '原神', '诛仙']
print(games[1:-1:1]) #['和平精英', '生化危机', '原神', '诛仙', '穿越火线', '部落冲突', '红警']
print(games[3:-1:-1]) # []
print(games[-1:-5:1]) # []
print(games[0:-3:2]) # ['王者荣耀','生化危机','诛仙']
print(games[-1:2:-2]) # ['魂斗罗', '部落冲突', '诛仙']
print(games[2:-1:1]) # ['生化危机','原神','诛仙','穿越火线','部落冲突','红警']
- 省略步长
# 列表[开始下标:结束下标] == 列表[开始下标:结束下标:1]
# 省略步长,步长就是1
games = ['王者荣耀','和平精英','生化危机','原神','诛仙','穿越火线','部落冲突','红警','魂斗罗']
print(games[2:-2]) # ['生化危机','原神','诛仙','穿越火线','部落冲突']
- 省略开始下标
# 列表[:结束下标:步长] / [:结束下标]
# 省略开始下标,如果步长为正,从第一个元素开始往后取;如果步长为负则从最后一个元素开始往前取
print(games[:-3]) #['王者荣耀','和平精英','生化危机','原神','诛仙','穿越火线']
print(games[:3:-1]) #['魂斗罗', '红警', '部落冲突', '穿越火线', '诛仙']
- 省略结束下标
# 列表[开始下标::步长] / [开始下标:] --- 省略结束下标和步长时 : 也要省略
# 省略结束下标:如果步长为正,从开始下标开始取到最后一个元素;如果步长为负,从开始下标开始取到最前面一个元素
games = ['王者荣耀','和平精英','生化危机','原神','诛仙','穿越火线','部落冲突','红警','魂斗罗']
print(games[1:]) #['和平精英','生化危机','原神','诛仙','穿越火线','部落冲突','红警','魂斗罗']
print(games[3::2]) #['原神','穿越火线','红警']
print(games[-2::-1]) #['红警', '部落冲突', '穿越火线', '诛仙', '原神', '生化危机', '和平精英', '王者荣耀']
- 开始结束下标一起省
# 列表[::步长] / 列表[:]
print(games[::-1]) #['魂斗罗', '红警', '部落冲突', '穿越火线', '诛仙', '原神', '生化危机', '和平精英', '王者荣耀']
print(games[::2]) #['王者荣耀', '生化危机', '诛仙', '部落冲突', '魂斗罗']
print(games[:]) #['王者荣耀','和平精英','生化危机','原神','诛仙','穿越火线','部落冲突','红警','魂斗罗']
print('abcdef'[1:]) #bcdef
二、删和改
- 删 - 删除列表元素(让列表元素个数减少)
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
# 1) del 列表[下标] - 删除列表中指定下标对应的元素
# 注:下标不能越界
del teleplays[2]
print(teleplays) #['琅琊榜', '大秦', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
# 删除之后原列表重新排序
del teleplays[-2]
print(teleplays) #['琅琊榜', '大秦', '康熙王朝', '破产姐妹', '亮剑', '西游记']
# 2)列表.remove(元素) - 删除列表中指定元素
# 注意:1.如果元素不存在,会报错
# 2.如果元素有多个,只删第一个
teleplays.remove('琅琊榜')
print(teleplays) #['大秦', '康熙王朝', '破产姐妹', '亮剑', '西游记']
# teleplays.remove('白蛇🐍传') #list.remove(x): x not in list
nums = [10,20,30,20,10,20]
nums.remove(20)
print(nums) #[10, 30, 20, 10, 20]
# 3)
# 列表.pop() -- 取出列表最后一个元素
# 列表.pop(下标) -- 取出列表中指定下标对应的元素
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
del_item = teleplays.pop()
print(teleplays) #['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸']
print(del_item) # 西游记
del_item = teleplays.pop(1)
print(teleplays) #['琅琊榜', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸']
print(del_item) # 大秦
# 4)列表.clear() ---- 清空列表
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
teleplays.clear()
print(teleplays) #------------ 这个要好一些
# teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
# print(teleplays)
# teleplays = []
# print(teleplays) #------------这个一般不用(不好)
- 改 - 修改元素的值
# 列表[下标] = 值 ---- 将列表中指定下标对应的元素修改成指定的值
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
print(teleplays)
teleplays[0] = '庆余年'
print(teleplays) #['庆余年', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
# 练习:将低于60分的成绩全部改成0分
# 方法一:
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
for x in range(len(scores)):
if scores[x] < 60:
scores[x] = 0
print(scores)
# 方法二
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
for index, item in enumerate(scores):
if item < 60:
scores[index] = 0
print(scores)
# 方法三:
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
new_scores = []
for item in scores:
if item < 60:
new_scores.append(0)
continue
new_scores.append(item)
print(new_scores)
# 练习2:删除列表中低于60分的成绩
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
for x in scores:
if x < 60:
scores.remove(x)
print(scores)
列表相关操作
- 数学运算符:+、*
# 列表1+列表2 -- 将列表1和列表2合并成一个新列表
# 列表1 * N/ N * 列表1 ----- 将N个列表1合并产生一个新的列表
print([1,2,3] + [10,20,30])
list1 = [100,200]
list2 = [1000,2000]
print(list2+list1,list1)
print(list1 * 3) #[100, 200, 100, 200, 100, 200]
- 比较运算符:==、 !=、 >、 <、 <=、 >=
# 1)== 、 !=
print([1,2,3] == [1,2,3]) #True
print([1,2,3] == [1,3,2]) #False
print({1,2,3} == {1,3,2}) #True,集合无序
# 2)列表1 >(<、>=、<=)列表2
# 两个列表比较大小的原理:比较元素第一对不相等 的大小(两个列表下标相同的元素为一对,这个下标是0开始的)
print([1,200,300,400,50] >[10,2]) # False
print([11,0,0,0] > [10,2]) # True
- in 和 not in
# 元素 in 列表 ---- 判断列表中是否存在指定元素
# 元素 not in 列表 ---- 判断列表中是否不存在指定元素
print(10 in [10,20,30]) # True
print([10,20] in [10,20,30]) # False
print([10,20] in [[10,20],30]) # True
score = 89
# 判断分数值石佛100分或者0分或者60
if score == 100 or score == 0 or score == 60:
print('特殊值')
if score in [0,60,100]:
print('特殊值')
v = 34
if type(v) == int or type(v) == float or type(v) == bool or type(v) == complex:
print('数字')
else:
print('不是数字')
if type(v) in [int,float,complex,bool]:
print('数字')
else:
print('不是数字')
四、相关函数和方法
- 列表相关方法:copy、count、index、reverse、sort
# 1)列表.count(元素) - 统计列表中指定元素的个数
nums = [10,20,30,4,10,20,10,10]
print(nums.count(10)) #4
print(nums.count(4)) #1
print(nums.count(100)) #0
# 2.列表.index(元素) --- 获取元素第一次出现在列表中的下标(下标是0开始的下标值)
print(nums.index(20)) #1
print(nums.index(4)) #3
print(nums.index(10)) #0
# print(nums.index(200)) ---- 报错(ValueError: 200 is not in list)
# 3)列表.reverse() --- 倒序
nums = [10,20,5,2]
nums.reverse()
print(nums) #[2, 5, 20, 10]
# 4)
# 列表.sort() - 将列表中的元素从小到大排序
# 列表.sort(reverse=True) -- 将列表中的元素从大到小排序
nums = [10,20,5,2,100]
nums.sort()
print(nums) #[2, 5, 10, 20, 100]
nums = [10,20,5,2,100]
nums.sort(reverse=True)
print(nums) #[100, 20, 10, 5, 2]
# 5)列表.copy() --- 复制列表产生一个元素一模一样的新列表(和原列表地址不一样)
list1 = [1,2,3]
print(list1)
list2 = list1
print(list2) #[1, 2, 3]
list3 = list1.copy()
print(list3) #[1, 2, 3]
list1.append(100)
print(list1) #[1, 2, 3, 100]
print(list2) #[1, 2, 3, 100]
print(list3) #[1, 2, 3]