一、常用数据类型梳理
| Python 类型 | C 类比 / 特点 | 可变? | 示例 |
|---|---|---|---|
int |
不限大小,没有 long/short/unsigned | 不可变 | a = 10 |
float |
双精度浮点(相当于 double) | 不可变 | b = 3.14 |
bool |
True / False,是 int 子类 |
不可变 | flag = True |
str |
字符序列,Unicode 支持,不像 C 的 char[] |
不可变 | s = "hello" |
list |
动态数组 ,可混合类型,相当于 vector<void*> |
可变 | lst = [1, "a", 3.0] |
tuple |
不可变的列表,类似 const 数组 |
不可变 | t = (1, 2, 3) |
dict |
哈希表 / 映射,键值对 | 可变 | d = {"name": "Tom", "age": 20} |
set |
无重复元素集合,类似哈希 set | 可变 | s = {1, 2, 3} |
None |
空值,类似 NULL |
不可变 | x = None |
二、练习题快速巩固复习
练习一:列表与切片 ------ 模拟栈和队列
python
#列表与切片练习#
data = [10, 20, 30, 40, 50]
#获取前3个元素
data1 = data[0:3]
#获取最后2个元素
data2 = data[-2:]
#列表反转
data3 = data[::-1]
#用列表模拟栈(后进先出),依次压入 60, 70,再弹出两个元素,给出最终列表
data.append(60)
data.append(70)
data.pop()
data.pop()
print(data1)
print(data2)
print(data3)
print(data)
运行结果:
python
[10, 20, 30]
[40, 50]
[50, 40, 30, 20, 10]
[10, 20, 30, 40, 50]
练习二:字典与字符串 ------ 字符频率统计
给定一个字符串 text = "abracadabra",请统计每个字符出现的次数,结果用字典表示;然后找出出现次数最多的字符及其次数。
python
text = "abracadabra"
text_dict = {}
for x in text:
text_dict[x] = text_dict.get(x,0) + 1
text_key = max(text_dict, key=text_dict.get)
print(text_dict)
print(f"{text_key}:{text_dict[text_key]}")
运行结果:
python
{'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
a:5
练习三:集合操作 ------ 找出两份名单的异同
两个名单:
list_a = ["Alice", "Bob", "Charlie", "David"]
list_b = ["Bob", "David", "Eve", "Frank"]
请找出:
-
同时出现在两份名单中的人(交集)
-
只在第一份名单中的人(差集)
-
两份名单中全部不重复的人(并集)
-
将结果转换为排序后的列表
python
list_a = ["Alice", "Bob", "Charlie", "David"]
list_b = ["Bob", "David", "Eve", "Frank"]
set_a = set(list_a)
set_b = set(list_b)
set1 = set_a & set_b
set2 = set_a - set_b
set3 = set_a | set_b
set1 = sorted(set1)
set2 = sorted(set2)
set3 = sorted(set3)
print(set1)
print(set2)
print(set3)
运行结果:
python
['Bob', 'David']
['Alice', 'Charlie']
['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank']
练习四:元组解包与列表推导式 ------ 成绩筛选
给定一个包含学生姓名和分数的元组列表:
records = [("Tom", 85), ("Jerry", 92), ("Spike", 78), ("Tyke", 95), ("Butch", 88)]
请完成:
-
用列表推导式生成一个仅包含姓名的大写列表(所有姓名转大写)
-
用推导式生成一个列表,包含分数大于等于 90 的学生姓名
-
计算所有分数的平均值(保留一位小数)
python
records = [("Tom", 85), ("Jerry", 92), ("Spike", 78), ("Tyke", 95), ("Butch", 88)]
list_name = [name.upper() for name, score in records]
list_score_more_90 = [name for name, score in records if score >= 90]
score_average = sum(score/len(records) for name,score in records)
print(list_name)
print(list_score_more_90)
print(f"{score_average:.1f}")
运行结果:
python
['TOM', 'JERRY', 'SPIKE', 'TYKE', 'BUTCH']
['Jerry', 'Tyke']
87.6
练习五:综合应用 ------ 简单通讯录
用字典存储一个通讯录,键为姓名,值为包含电话和邮箱的字典。实现以下功能:
-
添加联系人
-
根据姓名查询信息,若不存在则返回 "Not found"
-
删除联系人
-
列出所有联系人的姓名(按字母排序)
python
contacts = {}
#添加联系人
def append_contacts(name, phone, email):
contacts[name] = {'phone': phone, 'email': email}
#根据姓名查询信息
def find_contacts(name):
return contacts.get(name, "Not found")
#删除联系人
def delete_contacts(name):
return contacts.pop(name)
#列出所有联系人的姓名(按字母排序)
def find_contact_name_sort():
return sorted(contacts.keys())
append_contacts("Alice", "123456", "alice@example.com")
append_contacts("Bob", "789012", "bob@example.com")
print(find_contacts("Alice")) # {'phone': '123456', 'email': 'alice@example.com'}
print(find_contacts("Eve")) # Not found
delete_contacts("Bob")
print(find_contact_name_sort()) # ['Alice']
运行结果:
python
{'phone': '123456', 'email': 'alice@example.com'}
Not found
['Alice']