常用数据结构之列表(二)
列表的方法
添加和删除元素
languages = ['Python', 'Java', 'C++']
# 添加
languages.append('JavaScript') # 追加到末尾
languages.insert(1, 'SQL') # 插入到指定位置
# 删除
languages.remove('Java') # 移除第一个匹配项
languages.pop() # 弹出最后一个元素
languages.pop(0) # 弹出指定位置元素
languages.clear() # 清空列表
del languages[1] # del 关键字删除
注意:
remove()找不到元素会引发ValueError,建议先做成员判断。
查找元素
items = ['Python', 'Java', 'Java', 'C++', 'Python']
print(items.index('Python')) # 0(第一个匹配的索引)
print(items.index('Python', 1)) # 4(从索引1开始查找)
print(items.count('Python')) # 2(出现次数)
排序和反转
items = ['Python', 'Java', 'C++', 'Kotlin']
items.sort() # 升序排序
items.reverse() # 反转列表
列表生成式
列表生成式是 Python 的特色语法,用一行代码创建列表,性能优于 for 循环 + append。
# 基础形式
[表达式 for 变量 in 可迭代对象]
# 示例:1-99中能被3或5整除的数
[i for i in range(1, 100) if i % 3 == 0 or i % 5 == 0]
# 平方列表
nums = [35, 12, 97, 64, 55]
squares = [num ** 2 for num in nums]
# 筛选大于50的元素
big_nums = [num for num in nums if num > 50]
建议:创建列表优先使用生成式语法,代码简洁且效率更高。
嵌套列表
列表元素也可以是列表,用于表示矩阵或表格:
scores = [[95, 83, 92], [80, 75, 82], [92, 97, 90]]
print(scores[0]) # [95, 83, 92]
print(scores[0][1]) # 83(第一个学生的第二门成绩)
生成嵌套列表:
import random
scores = [[random.randrange(60, 101) for _ in range(3)] for _ in range(5)]
应用:双色球随机选号
import random
red_balls = list(range(1, 34)) # 1-33红色球
blue_balls = list(range(1, 17)) # 1-16蓝色球
# 无放回随机抽样6个红球
selected_balls = random.sample(red_balls, 6)
selected_balls.sort()
for ball in selected_balls:
print(f'\033[031m{ball:02d}\033[0m', end=' ')
blue = random.choice(blue_balls)
print(f'\033[034m{blue:02d}\033[0m')
说明:
random.sample(seq, n)— 无放回抽取 n 个不重复元素
random.choice(seq)— 随机抽取 1 个元素
总结
- 列表是可变容器,支持增删改查操作
append()追加、insert()插入、remove()删除、pop()弹出- 优先使用列表生成式创建列表,性能更好
- 嵌套列表用于表示二维结构(矩阵、表格等)