Python列表
1. 什么是列表
- 列表的表示方式:
- 列表是容器型数据类型;
- 将[]作为容器的标志,里面多个元素用逗号隔开[元素1, 元素2, 元素3, …]
- 列表的特点:
- 列表是可变的(元素的个数、值、顺序可变) - 增、删、改
- 列表是有序的 - 支持下标操作
- 列表对元素的要求:
- 没有要求(不管什么类型的数据都可以作为列表的元素)
容器的基本特征:一个容器型的数据可以同时保存多个其他的数据
元素:容器中每一个独立的数据就是一个元素
列表中可以同时保存多个数据,也可也同时保存不同类型的数据
list3 = [89, 90, 76, 99, 58]
list4 = ['DuYS', 0.2, 18, True, [1, 'abc']]
2. 查 - 获取元素
-
获取单个元素
语法:列表[下标]
说明:
列表 - 任何结果是列表的表达式, 比如:保存列表的变量、具体的列表值等
[] - 固定写法
下标 - 下标又叫索引, 是元素在有序序列中位置信息Python中有序序列中每个元素都有两组下标值,分别是:
从前往后从0开始递增的下标值;
从后往前从-1开始递减的下标值。注意:下标不能越界
-
遍历
语法:
for 变量 in 列表:
循环体
3. 增 - 添加元素
-
添加单个元素
列表.append(元素) - 在列表的最后添加一个元素
列表.insert(下标, 元素) - 在指定下标对应的元素前插入指定元素 -
批量添加
列表1.extend(列表2) - 将列表2中的元素全部添加到列表1的后面
4. 切片 - 获取部分元素
切片的结果是列表
-
语法:列表[开始下标:结束下标:步长]
-
说明:
- 开始下标 - 下标值(0开始的和-1开始的都行); 确定切片有效范围的起点, 可以取到
- 结束下标 - 下标值(0开始的和-1开始的都行); 确定切片有效范围的终点, 不可取到
- 步长
- 1)决定切片的方向(步长对应的方向应该必须和开始到结束的方向一致,否则切片结果为空)
- 2)决定获取元素的方式(一个一个的取还是跳着取)
-
注: 切片的有效范围是:[开始下标, 结束下标)
games = ['王者荣耀', '和平精英', '生化危机', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗'] games1 = games[1:5:1] # ['和平精英', '生化危机', '原神', '诛仙'] print(games1) 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]) # ['生化危机', '原神', '诛仙', '穿越火线', '部落冲突', '红警']
-
省略步长:列表[开始下标:结束下标]; 省略步长,步长默认为
print(games[2:-2]) # ['生化危机', '原神', '诛仙', '穿越火线', '部落冲突']
-
省略开始下标:列表[:结束下标:步长] / 列表[:结束下标];省略开始下标,如果步长为正,从第一个元素开始往后取;如果步长为负,从最后一个元素开始往前取。
print(games[:-3]) # ['王者荣耀', '和平精英', '生化危机', '原神', '诛仙', '穿越火线'] print(games[:3:-1]) # ['魂斗罗', '红警', '部落冲突', '穿越火线', '诛仙']
-
省略结束下标: 列表[开始下标::步长] / 列表[开始下标:]; 省略结束下标: 如果步长为正,从开始下标开始取最后一个元素;如果步长为负,从开始下标开始取到第一个元素
print(games[1:]) # ['和平精英', '生化危机', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗'] print(games[3::2]) # ['原神', '穿越火线', '红警'] print(games[-2::-1]) # ['红警', '部落冲突', '穿越火线', '诛仙', '原神', '生化危机', '和平精英', '王者荣耀']
-
一起省:列表[::步长] / 列表[] - 有效范围为整个列表
print('abcdef'[1:]) # ['bcdef']
5. 删、改
-
删 - 删除列表元素(让列表元素的个数减少)
-
del 列表[下标] - 删除列表中指定下标的对应的元素
- 注:不能越界,否则会报错
-
列表.remove(元素)
- a. 元素不存在 - 报错
- 元素有多个 - 只删第一个
-
列表.pop() - 取出列表中最后一个元素
- 列表.pop(下标) - 取出列表中指定下标对应的元素
-
列表.clear()
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记'] teleplays.clear() # 储存地址没变 (效率更高) print(teleplays) teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记'] teleplays = [] # 储存地址变了 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) # 练习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: del scores[i] else: i += 1 print(scores) scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70] for i in game[::-1]: if i < 60: scores.remove(i) print(scores)
6. 列表的相关操作
- 数学运算符 : + 、 *
- 列表1 + 列表2 - 讲列表1和列表2 合并成一个新的列表
- 列表1 * N / N * 列表1 - 将N个列表1合并产生一个新的列表
- 比较运算符: == 、!= 、> 、< 、<= 、>=
- == 、 !=
- 列表1 >(<、>=、<=) 列表2
- 比较大小的原理:比较第一对不同元素的大小
- 下标相同的元素为一对
- in 和 not in
- 元素 in 列表 - 判断列表中是否存在指定元素
- 元素 not in 列表 - 判断列表中是否不存在指定元素
7. 列表的相关方法:
copy, count, index, reverse, sort
- 列表.count(元素) - 统计列表中指定元素的个数
- 列表.index(元素) - 获取元素第一次出现在列表中的下标(0开始的下标值)
- 列表.reverse() - 倒叙
- 列表.sort() - 将列表中的元素从小到大排序
- 列表.sort(reverse=True) - 将列表中的元素从大到小排序
- 列表.copy() - 赋值列表产生一个元素一模一样的新列表
- 注:保存地址与原来不一样
8. 练习题
1.已知一个数字列表,求列表中心元素。
nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
if len(nums) % 2:
print('列表共有', len(nums), '个元素,中心元素为:', nums[len(nums) // 2])
else:
print('列表共有', len(nums), '个元素,中心元素为:', nums[len(nums) // 2 - 1], nums[len(nums) // 2])
2.已知一个数字列表,求所有元素和。
nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
nums_sum = 0
for i in nums:
nums_sum += i
print('所有的元素和为:', nums_sum)
3.已知一个数字列表,输出所有奇数下标元素。
nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
print('奇数下标元素有:')
for index, item in enumerate(nums):
if index % 2:
print(item, end=' ')
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
print('值为奇数的元素有:')
for item in nums:
if item % 2:
print(item, end=' ')
5.已知一个数字列表,将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
nums = [1, 2, 3, 4]
for index, item in enumerate(nums):
nums[index] = item * 2
print(nums)
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三', '李四', '大黄', '大黄']
names_2 = []
for item in names:
if item not in names_2:
names_2.append(item)
print(names_2)
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
scores.remove(max(scores))
scores.remove(min(scores))
scores_sum = 0
for item in scores:
scores_sum += item
print('平均分为:', scores_sum / len(scores))
8.有两个列表A和B,使用列表C来获取两个列表中公共的元素
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]
list_1 = [1, 'a', 4, 90]
list_2 = ['a', 8, 'j', 1]
list_end = []
for item in list_1:
if item in list_2:
list_end.append(item)
print(list_end)
9.有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
例如: nums = [19, 89, 90, 600, 1] —> 600
nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
nums.sort()
print('列表的最大值为:', nums[-1])
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]
nums_2 = []
max_count = 0
value = 0
for item in nums:
if item not in nums_2:
nums_2.append(item)
for item in nums_2:
if nums.count(item) > max_count:
max_count = nums.count(item)
value = item
print(value)
# 方法二
nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
value = 0
max_count = 0
for item in nums:
count = 0
while item in nums:
count += 1
nums.remove(item)
if count >= max_count:
max_count = count
value = item
print(value)