容器基础(二)
@TOC
一、容器类型-公共的运算符
1.分类
| 字符串 | 列表 | 元组 | 字典 | 集合 |
|---|
| + | ✅ | ✅ | ✅ | ❌ | ❌ |
| * | ✅ | ✅ | ✅ | ❌ | ❌ |
| in | ✅ | ✅ | ✅ | ✅ | ✅ |
| not in | ✅ | ✅ | ✅ | ✅ | ✅ |
2.演示
print('aa' + 'bb')
print([1, 2, 3] + [4, 5, 6] + ['a', 'b'])
print((1, 2, 3) + ('a', 'b'))
print('-' * 28)
print([1, 2, 3] * 2)
print((1, 2, 3) * 2)
print('-' * 28)
print('a' in 'abc')
print(10 in [10, 20, 30])
print(10 in (10, 20, 30))
print(10 in {10, 20, 30})
print('name' in {'name': '张三', 'age': 23})
print(23 in {'name': '张三', 'age': 23})
print('-' * 28)
print('a' not in 'abc')
print(10 not in [10, 20, 30])
print(10 not in (10, 20, 30))
print(10 not in {10, 20, 30})
print('name' not in {'name': '张三', 'age': 23})
print(23 not in {'name': '张三', 'age': 23})
二、容器类型-公共函数
1.主要函数
| 函数名 | 功能 |
|---|
| len() | 获取长度 |
| del 或者del() | 删除 |
| max() | 获取最大值 |
| min() | 获取最小值 |
| range(start, end, step) | 生成制定范围内的数据 |
| enumerate() | 基于可迭代类型(字符串、列表、元组等),生成下标+元素的方式 |
2.演示
list1 = [10, 50, 20, 30, 66, 22]
print(len(list1))
del list1[1]
del(list1[1])
print(f'删除后的list1: {list1}')
print(f'最大值: {max(list1)}')
print(f'最大值: {min(list1)}')
print(f'range生成数据: {range(1, 5, 2)}')
print(f'range生成数据: {list(range(1, 5, 2))}')
print(f'list1: {list1}')
print(enumerate(list1))
for i in enumerate(list1):
print(i)
print('-' * 28)
for i in enumerate(list1, 5):
print(i)
三、列表推导式详解
1.介绍
推导式介绍:
概述:
推导式也叫解析式, 属于Python的一种特有写法, 目的是: 简化我们代码编写的.
分类:
列表推导式
集合推导式
字典推导式
格式:
变量名 = [变量名 for ... in ... if 判断条件]
变量名 = {变量名 for ... in ... if 判断条件}
变量名 = {变量名1:变量名2 for ... in ... if 判断条件}
2.演示
list1 = []
for i in range(10):
list1.append(i)
print(list1)
list2 = [i for i in range(10)]
print(list2)
list3 = list(range(10))
print(list3)
print('-' * 28)
list1 = []
for i in range(10):
if i % 2 == 0:
list1.append(i)
print(list1)
list2 = [i for i in range(10) if i % 2 == 0]
print(list2)
list3 = list(range(0, 10, 2))
print(list3)
print('-' * 28)
list1 = []
for i in range(1, 3):
for j in range(3):
list1.append((i, j))
print(list1)
list2 = [(i, j) for i in range(1, 3) for j in range(3)]
print(list2)
print('-' * 28)
四、集合和字典推导式详解
演示
set1 = {i for i in range(10) if i % 2 == 0}
print(set1)
list1 = [1, 1, 2]
set2 = {i ** 2 for i in list1}
print(set2)
print('-' * 28)
dict1 = {i: i ** 2 for i in range(1, 6)}
print(dict1)
print('-' * 28)
list1 = ['name', 'age', 'gender']
list2 = ['Tom', 20, 'male']
dict2 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict2)
五、例题
例题1
1.题干
假设有一个学生信息列表,每个元素包含学生姓名、年龄和成绩。请按照以下要求完成操作
使用 reverse() 方法将列表反转。
使用 sort() 方法按照成绩从高到低对列表进行排序。
输出平均年龄和前三名学生的信息(姓名、年龄和成绩)。
2.解答
students = [('Alice', 20, 85), ('Bob', 19, 92), ('Catherine', 21, 78), ('David', 20, 95), ('Emily', 19, 88)]
students.reverse()
print("反转后的列表:", students)
def get_score(student):
return student[2]
students.sort(key=get_score, reverse=True)
print("按成绩从高到低排序后的列表:", students)
total_age = 0
for student in students:
total_age += student[1]
average_age = total_age / len(students)
print("平均年龄:", average_age)
print("前三名学生的信息:")
for i in range(min(3, len(students))):
print(f"姓名: {students[i][0]}, 年龄: {students[i][1]}, 成绩: {students[i][2]}")
例题2
1.题干
假设你正在开发一个在线商店的购物车功能,需要编写 Python 代码来处理购物车内的商品。
请完成以下要求:
已知有一个购物车商品列表 cart = [("Apple", 2), ("Banana", 3), ("Orange", 4), ("Pear", 1)],
其中每个元组表示一种商品及其数量。请使用列表推导式编写代码,实现以下功能:
创建一个新列表 cart_items,其中仅包含购物车中的商品名称(即去除商品数量信息)。
创建一个新列表 expensive_items,其中仅包含购物车商品数量>=3的商品名称。
将购物车中每个商品的数量加倍,并创建一个新的购物车列表 cart_doubled。
请编写上述要求的代码,并输出最终的列表 cart_items、expensive_items 和 cart_doubled。
2.解答
cart_items = [name[0] for name in cart]
print(cart_items)
expensive_items = [item[0] for item in cart if item[1] >= 3]
print(expensive_items)
cart_doubled = [(item[0], item[1] * 2) for item in cart]
print(cart_doubled)