跳转至

第四章:数据类型

本章深入学习 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

访问元素

point = (3, 4)

print(point[0])   # 3
print(point[-1])  # 4
print(point[0:2]) # (3, 4)

元组特点

# 不可修改
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. 创建一个列表,包含 1-10 的平方数。
  2. 编写程序统计字符串中每个字符出现的次数。
  3. 使用集合找出两个列表的共同元素。