第6课:列表与元组
课程概述
本节课将学习Python中的两种重要数据结构:列表(list)和元组(tuple)。
欢迎大家关注此公众号,后台留言"python书籍"可免费获取【Python办公自动化高清PDF】电子书一本
此外小庄推荐一本适合于新手\小白入手一本 Python基础书籍,欢迎大家订阅
列表(List)
列表是Python中最常用的数据结构,可以存储多个元素,且元素可以是不同类型。
创建列表
# 空列表
empty_list = []
# 包含元素的列表
numbers = [1, 2, 3, 4, 5]
fruits = ['apple', 'banana', 'orange']
mixed = [1, 'hello', 3.14, True]
# 使用list()函数
chars = list('Python') # ['P', 'y', 't', 'h', 'o', 'n']
访问列表元素
fruits = ['apple', 'banana', 'orange', 'grape']
# 索引访问(从0开始)
print(fruits[0]) # 'apple'
print(fruits[2]) # 'orange'
# 负索引(从-1开始,表示倒数第一个)
print(fruits[-1]) # 'grape'
print(fruits[-2]) # 'orange'
# 切片
print(fruits[1:3]) # ['banana', 'orange']
print(fruits[:2]) # ['apple', 'banana']
print(fruits[2:]) # ['orange', 'grape']
print(fruits[::2]) # ['apple', 'orange'](步长为2)
修改列表
fruits = ['apple', 'banana', 'orange']
# 修改单个元素
fruits[1] = 'pear'
print(fruits) # ['apple', 'pear', 'orange']
# 添加元素
fruits.append('grape') # 在末尾添加
fruits.insert(1, 'kiwi') # 在指定位置插入
# 删除元素
fruits.remove('apple') # 删除指定值
del fruits[0] # 删除指定索引
popped = fruits.pop() # 删除并返回最后一个元素
列表方法
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
# 排序
numbers.sort() # 原地排序
print(numbers) # [1, 1, 2, 3, 4, 5, 6, 9]
sorted_numbers = sorted(numbers, reverse=True) # 返回新列表
# 反转
numbers.reverse()
# 统计
print(numbers.count(1)) # 2(1出现的次数)
print(numbers.index(5)) # 查找5的索引
# 列表长度
print(len(numbers))
列表操作
# 列表拼接
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2 # [1, 2, 3, 4, 5, 6]
# 列表重复
repeated = [0] * 5# [0, 0, 0, 0, 0]
# 列表复制
original = [1, 2, 3]
copy1 = original.copy()
copy2 = original[:]
列表推导式
# 创建平方数列表
squares = [x**2for x inrange(1, 6)] # [1, 4, 9, 16, 25]
# 过滤偶数
numbers = [1, 2, 3, 4, 5, 6]
evens = [x for x in numbers if x % 2 == 0] # [2, 4, 6]
# 嵌套列表推导式
matrix = [[i*j for j inrange(1, 4)] for i inrange(1, 4)]
元组(Tuple)
元组与列表类似,但元组是不可变的(创建后不能修改)。
创建元组
# 空元组
empty_tuple = ()
# 包含元素的元组
coordinates = (3, 4)
person = ('张三', 25, '北京')
# 单元素元组(注意逗号)
single = (1,)
# 不使用括号
point = 1, 2, 3
访问元组
person = ('张三', 25, '北京')
# 索引访问
print(person[0]) # '张三'
print(person[-1]) # '北京'
# 切片
print(person[1:]) # (25, '北京')
# 元组解包
name, age, city = person
print(name) # '张三'
元组方法
numbers = (1, 2, 3, 2, 4, 2)
# 计数
print(numbers.count(2)) # 3
# 查找索引
print(numbers.index(3)) # 2
# 长度
print(len(numbers)) # 6
元组的优势
# 1. 作为字典的键(列表不可以)
locations = {
(0, 0): '原点',
(1, 0): '东',
(0, 1): '北'
}
# 2. 函数返回多个值
defget_user_info():
return'张三', 25, '北京'
name, age, city = get_user_info()
# 3. 保护数据不被修改
config = ('localhost', 8080, 'admin')
列表与元组的比较
# 列表:可变,使用方括号
my_list = [1, 2, 3]
my_list[0] = 10# 可以修改
# 元组:不可变,使用圆括号
my_tuple = (1, 2, 3)
# my_tuple[0] = 10 # 错误!不能修改
# 性能:元组比列表稍快
# 用途:列表用于同类数据集合,元组用于异构数据记录
实用示例
示例1:学生成绩管理
students = [
('张三', 85),
('李四', 92),
('王五', 78)
]
# 按成绩排序
students.sort(key=lambda x: x[1], reverse=True)
# 打印排名
for i, (name, score) inenumerate(students, 1):
print(f"第{i}名:{name},成绩:{score}")
示例2:购物车
cart = []
# 添加商品
cart.append(('苹果', 5.0, 3))
cart.append(('香蕉', 3.0, 5))
cart.append(('橙子', 4.0, 2))
# 计算总价
total = sum(price * quantity for name, price, quantity in cart)
print(f"总价:{total}元")
# 显示购物车
for name, price, quantity in cart:
print(f"{name}:单价{price}元,数量{quantity},小计{price*quantity}元")
示例3:数据统计
scores = [85, 92, 78, 90, 88, 76, 95, 89]
# 统计信息
print(f"最高分:{max(scores)}")
print(f"最低分:{min(scores)}")
print(f"平均分:{sum(scores) / len(scores):.2f}")
print(f"及格人数:{len([s for s in scores if s >= 60])}")
课后练习
- 3. 使用列表推导式生成1到100之间所有能被3整除的数
小结
本节课我们学习了列表和元组这两种重要的数据结构。列表是可变的,适合存储同类数据;元组是不可变的,适合存储异构数据记录。
下一课,我们将学习字典和集合。