第四章:数据类型¶
本章深入学习 Python 的数据结构。
4.1 列表(List)¶
列表是可变的有序集合。
创建列表¶
# 空列表
empty_list = []
empty_list = list()
# 带元素的列表
numbers = [1, 2, 3, 4, 5]
fruits = ["苹果", "香蕉", "橙子"]
mixed = [1, "hello", 3.14, True] # 可以混合类型
访问元素¶
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
# 索引访问
print(fruits[0]) # "苹果"
print(fruits[-1]) # "葡萄"(最后一个)
# 切片
print(fruits[1:3]) # ["香蕉", "橙子"]
print(fruits[:2]) # ["苹果", "香蕉"]
print(fruits[2:]) # ["橙子", "葡萄"]
修改列表¶
fruits = ["苹果", "香蕉", "橙子"]
# 修改元素
fruits[0] = "草莓"
print(fruits) # ["草莓", "香蕉", "橙子"]
# 添加元素
fruits.append("葡萄") # 末尾添加
fruits.insert(1, "西瓜") # 指定位置插入
# 删除元素
fruits.remove("香蕉") # 按值删除
del fruits[0] # 按索引删除
last = fruits.pop() # 弹出最后一个
fruits.pop(0) # 弹出指定索引
# 合并列表
list1 = [1, 2]
list2 = [3, 4]
list3 = list1 + list2 # [1, 2, 3, 4]
list1.extend(list2) # list1 变为 [1, 2, 3, 4]
列表方法¶
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
# 排序
numbers.sort() # 原地排序
numbers.sort(reverse=True) # 降序
sorted_nums = sorted(numbers) # 返回新列表
# 反转
numbers.reverse()
# 统计
print(numbers.count(1)) # 1 出现的次数
print(numbers.index(5)) # 5 的索引
# 其他
numbers.clear() # 清空
numbers.copy() # 复制
len(numbers) # 长度
max(numbers) # 最大值
min(numbers) # 最小值
sum(numbers) # 求和
列表推导式¶
# 基本形式
squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 带条件
evens = [x for x in range(20) if x % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 带表达式
names = ["alice", "bob", "charlie"]
upper_names = [name.upper() for name in names]
# ["ALICE", "BOB", "CHARLIE"]
4.2 元组(Tuple)¶
元组是不可变的有序集合。
创建元组¶
# 空元组
empty = ()
empty = tuple()
# 带元素的元组
point = (3, 4)
colors = ("红", "绿", "蓝")
# 单元素元组(注意逗号)
single = (1,) # 必须有逗号
not_tuple = (1) # 这只是数字 1
访问元素¶
元组特点¶
# 不可修改
colors = ("红", "绿", "蓝")
# colors[0] = "黄" # TypeError!
# 可以重新赋值
colors = ("黄", "绿", "蓝") # OK
# 可以解包
x, y = (3, 4)
print(x, y) # 3 4
# 交换变量
a, b = 1, 2
a, b = b, a
print(a, b) # 2 1
元组的应用¶
# 函数返回多个值
def get_stats(numbers):
return min(numbers), max(numbers), sum(numbers)
minimum, maximum, total = get_stats([1, 2, 3, 4, 5])
# 作为字典的键
locations = {
(0, 0): "原点",
(1, 0): "x轴上",
(0, 1): "y轴上"
}
4.3 字典(Dictionary)¶
字典是键值对的无序集合。
创建字典¶
# 空字典
empty = {}
empty = dict()
# 带元素的字典
person = {
"name": "张三",
"age": 25,
"city": "北京"
}
# 使用 dict()
person = dict(name="张三", age=25, city="北京")
访问元素¶
person = {"name": "张三", "age": 25, "city": "北京"}
# 通过键访问
print(person["name"]) # "张三"
print(person.get("age")) # 25
print(person.get("job", "无")) # "无"(默认值)
# 键不存在时
# print(person["job"]) # KeyError!
print(person.get("job")) # None
修改字典¶
person = {"name": "张三", "age": 25}
# 添加/修改
person["city"] = "北京" # 添加
person["age"] = 26 # 修改
# 删除
del person["city"]
age = person.pop("age") # 删除并返回值
# 更新
person.update({"name": "李四", "job": "工程师"})
字典方法¶
person = {"name": "张三", "age": 25, "city": "北京"}
# 获取所有键、值、键值对
print(person.keys()) # dict_keys(['name', 'age', 'city'])
print(person.values()) # dict_values(['张三', 25, '北京'])
print(person.items()) # dict_items([('name', '张三'), ...])
# 遍历
for key in person:
print(key, person[key])
for key, value in person.items():
print(f"{key}: {value}")
# 其他
person.clear() # 清空
person.copy() # 浅复制
person.setdefault("job", "无") # 如果不存在则设置
字典推导式¶
# 创建字典
squares = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 过滤
scores = {"张三": 85, "李四": 92, "王五": 78}
passed = {name: score for name, score in scores.items() if score >= 80}
# {"张三": 85, "李四": 92}
4.4 集合(Set)¶
集合是无序的不重复元素集合。
创建集合¶
# 空集合(注意:{} 是空字典)
empty = set()
# 带元素的集合
fruits = {"苹果", "香蕉", "橙子"}
numbers = set([1, 2, 2, 3, 3, 3]) # {1, 2, 3}
集合操作¶
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
# 添加删除
a.add(5)
a.remove(3) # 不存在会报错
a.discard(10) # 不存在不报错
a.pop() # 随机删除一个
# 集合运算
print(a | b) # 并集 {1, 2, 3, 4, 5, 6}
print(a & b) # 交集 {3, 4}
print(a - b) # 差集 {1, 2}
print(a ^ b) # 对称差 {1, 2, 5, 6}
# 方法形式
a.union(b)
a.intersection(b)
a.difference(b)
集合的应用¶
# 去重
numbers = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(numbers)) # [1, 2, 3, 4]
# 成员测试(比列表快)
fruits = {"苹果", "香蕉", "橙子"}
print("苹果" in fruits) # True
# 判断子集
a = {1, 2}
b = {1, 2, 3, 4}
print(a.issubset(b)) # True
print(b.issuperset(a)) # True
4.5 数据类型转换¶
# 列表 ↔ 元组
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
back_to_list = list(my_tuple)
# 列表 ↔ 集合
my_list = [1, 2, 2, 3]
my_set = set(my_list) # {1, 2, 3}
back_to_list = list(my_set)
# 字典键/值转列表
person = {"name": "张三", "age": 25}
keys = list(person.keys())
values = list(person.values())
# 字符串 ↔ 列表
s = "hello"
chars = list(s) # ['h', 'e', 'l', 'l', 'o']
back = "".join(chars) # "hello"
小结¶
本章学习了:
- ✅ 列表:可变有序集合
- ✅ 元组:不可变有序集合
- ✅ 字典:键值对集合
- ✅ 集合:无序不重复集合
- ✅ 数据类型转换
下一章¶
第五章:流程控制 - 学习条件判断和循环。
练习¶
- 创建一个列表,包含 1-10 的平方数。
- 编写程序统计字符串中每个字符出现的次数。
- 使用集合找出两个列表的共同元素。