切片
常规用法
语法
-
列表[开始下标:结束下标:步长]
-
说明:
-
开始下标
- 下标值(正索引与负索引都行,可混合使用);
- 确定切片范围的起点,可以被取到,是闭区间操作;
-
: - 固定写法
-
结束下标
- 下标值(正索引与负索引都行,可混合使用);
- 确定切片范围的终点,不能被取到,是开区间操作;
-
步长
- 决定切片的方向;(步长对应的方向必须和开始到结束的方向一致,否则切片结果为空)
- 获取元素的方式;(逐一获取还是跳跃获取)
-
注:切片的有效范围是:[开始下标,结束下标)
-
-
例子
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[:]) # ['王者荣耀', '和平精英', '使命召唤', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗']
列表元素操作
列表元素删除
- 删除列表指定元素(让列表元素的个数减少)
列表[下标]
-
删除列表中指定下标对应的元素;
-
下标不能越界;
-
例子
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记'] del teleplays[2] print(teleplays)
列表.remove(元素)
-
删除列表中指定的元素;
-
如果元素不存在,会报错;
-
如果匹配到多个元素,只会删除正方向第一个匹配项;
-
例子
teleplays.remove('琅琊榜') print(teleplays)
pop函数
-
列表.pop() - 取出列表最后一个元素;
-
列表.pop(下标) - 取出列表中指定下标对应的元素;
-
例子
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记'] del_item = teleplays.pop() print(teleplays, del_item, sep='\n') del_item = teleplays.pop(2) print(teleplays, del_item, sep='\n')
列表.clear()
-
将列表清空
-
例子
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记'] teleplays.clear() print(teleplays)
列表元素修改
- 修改元素的值
列表.[下标] = 值
-
将列表指定下标对应的元素修改成指定的值;
-
例子
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记'] print(teleplays) teleplays[0] = '庆余年' print(teleplays)
练习
-
练习1:将低于60分的成绩全部修改成0分
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70] for i in range(len(scores)): if scores[i] < 60: scores[i] = 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(item) else: new_scores.append(0) print(new_scores)
-
练习2:删除列表中低于60分的成绩
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70] i = 0 while i < len(scores): if scores[i] < 60: scores.remove(scores[i]) continue i += 1 print(scores)
列表相关操作
数学运算符
+ - 加法运算
- 列表1 + 列表2 - 将列表1和列表2合并成一个新的列表;
* - 乘法运算
- **列表1 * N(N正整数) ** - N个列表1合并成一个新的列表;
例子
list1 = [100, 200]
list2 = [111, 222]
print(list1 + list2) # [100, 200, 111, 222]
print(list1 * 3) # [100, 200, 100, 200, 100, 200]
比较运算符
==、!=
print([1, 2, 3] == [1, 2, 3]) # True
print([1, 2, 3] == [1, 3, 2]) # False
print({1, 2, 3} == {1, 2, 3}) # True 集合无序
>、<、>=、<=
-
列表比较大小的原理:比较第一对不相等;
-
元素的大小(正索引方向下标相同的元素为一对);
print([1, 2, 3, 4, 5] > [10, 2]) # False
print([10, 0, 1, 1, 1] > [9, 100]) # 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 v = 34 if type(v) in [int, float, bool]: print('数字') else: print('不是数字')
相关函数和方法
列表相关方法
列表.count(元素)
-
统计列表中指定元素的个数
nums = [10, 20, 30, 10] print(nums.count(10)) # 2 print(nums.count(100)) # 0
列表.index(元素)
-
获取指定元素第一次出现在列表中的正索引;
print(nums.index(10)) # 0 print(nums.index(100)) # 指定的元素不在列表中会报错
列表.rverse()
-
对列表进行逆序
nums = [10, 20, 3, 5] nums.reverse() print(nums) # [5, 3, 20, 10]
列表.sort([reverse=True])
-
将列表中的元素从小到大排序[从大到小]
nums = [10, 20, 5, 2, 100] nums.sort() print(nums) # [2, 5, 10, 20, 100] nums.sort(reverse=True) print(nums) # [100, 20, 10, 5, 2]
列表.copy()
- 复制列表,产生一个元素一模一样的新的列表
作业
1.已知一个数字列表,求列表中心元素。
# list1 = [1, 2, 3, 4, 5, 6, 7]
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
if not list1:
pass
elif len(list1) % 2 == 1:
while len(list1) != 1:
list1.pop(0)
list1.pop()
else:
while len(list1) != 2:
list1.pop(0)
list1.pop()
print(list1)
2.已知一个数字列表,求所有元素和。
list1 = [1, 2, 3, 4, 5, 6, 7]
sum1 = 0
for item in list1:
sum1 += item
print(sum1)
3.已知一个数字列表,输出所有奇数下标元素。
list1 = [1, 2, 3, 4, 5, 6, 7]
for index, _ in enumerate(list1):
if index % 2 == 1:
print(list1[index])
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
list1 = [1, 2, 3, 4, 5, 6, 7]
for item in list1:
if item % 2 == 1:
print(item)
5.已知一个数字列表,将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
for index, _ in enumerate(list1):
list1[index] = list1[index]*2
print(list1)
# [2, 4, 6, 8, 10, 12, 14, 16]
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三', '赵一', '钱二', '孙三']
index1 = 0
while index1 < len(names):
if names.count(names[index1]) == 1:
index1 += 1
else:
names.remove(names[index1])
print(names)
# ['李四', '大黄', '张三', '赵一', '钱二', '孙三']
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
sum1 = 0
scores.sort()
scores.pop(0)
scores.pop(-1)
for item in scores:
sum1 += item
print(sum1)
# 653
8.有两个列表A和B,使用列表C来获取两个列表中公共的元素
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]
A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
C = []
for i in range(len(A)):
for j, item in enumerate(B):
if A[i] == B[j]:
C.append(item)
print(C)
# [1, 'a']
9.有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
例如: nums = [19, 89, 90, 600, 1] —> 600
nums = [19, 89, 90, 600, 1]
nums.sort()
print(nums[-1])
# 600
10.获取列表中出现次数最多的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3
nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
max_num, count = 0, 0
for item in nums:
if nums.count(item) > count:
count = nums.count(item)
max_num = item
print(max_num)
# 3