第三章:列表
3.1 什么是列表?
列表就像 一个可以无限扩展的集装箱,可以存放各种类型的数据,并且可以随时添加、删除或修改里面的内容。
# 创建一个列表
scores = [96, 86, 90, 87, 78, 97];
names = ["张三", "李四", "王五"];
mixed = [1, "hello", 3.14, True];
3.2 列表的创建方式
列表可以用多种方式创建:
# 直接创建。
numbers = [1, 2, 3, 4, 5];
# 使用list()函数。
chars = list("hello") # ['h', 'e', 'l', 'l', 'o'];
# 使用range()创建数字序列.
numbers = list(range(1, 6)) # [1, 2, 3, 4, 5];
# 创建空列表。
empty_list = [];
empty_list2 = list();
3.3 列表的基本操作
3.3.1 访问列表元素
列表中的元素有固定的位置(索引),从0开始:
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print(fruits[0]) # 苹果 - 第一个元素
print(fruits[1]) # 香蕉 - 第二个元素
print(fruits[-1]) # 葡萄 - 最后一个元素
print(fruits[-2]) # 橙子 - 倒数第二个元素
3.3.2 列表切片
获取列表的一部分:
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[2:5]) # [2, 3, 4] - 从索引2到4
print(numbers[:3]) # [0, 1, 2] - 从开头到索引2
print(numbers[7:]) # [7, 8, 9] - 从索引7到结尾
print(numbers[::2]) # [0, 2, 4, 6, 8] - 每隔一个取一个
print(numbers[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] - 反转列表
3.3.3 修改列表元素
列表是可变的,可以直接修改元素:
fruits = ["苹果", "香蕉", "橙子"]
fruits[1] = "葡萄" # 修改第二个元素
print(fruits) # ['苹果', '葡萄', '橙子']
3.3.4 列表长度
使用 len() 函数获取列表长度:
fruits = ["苹果", "香蕉", "橙子"]
print(len(fruits)) # 3
3.3.5 检查元素是否存在
使用 in 关键字检查元素是否在列表中:
fruits = ["苹果", "香蕉", "橙子"]
print("苹果" in fruits) # True
print("葡萄" in fruits) # False
3.4 列表的常用方法
3.4.1 添加元素
fruits = ["苹果", "香蕉"]
# append() - 在末尾添加元素
fruits.append("橙子")
print(fruits) # ['苹果', '香蕉', '橙子']
# insert() - 在指定位置插入元素
fruits.insert(1, "葡萄")
print(fruits) # ['苹果', '葡萄', '香蕉', '橙子']
# extend() - 合并另一个列表
more_fruits = ["西瓜", "芒果"]
fruits.extend(more_fruits) # fruits列表和more_fruits列表合并。
print(fruits) # ['苹果', '葡萄', '香蕉', '橙子', '西瓜', '芒果']
3.4.2 删除元素
numbers = [1, 2, 3, 4, 2, 5];
# remove() - 删除指定值的第一个匹配项。
numbers.remove(2);
print(numbers); # [1, 3, 4, 2, 5]。
# pop() - 删除并返回指定位置的元素。
removed = numbers.pop(1);
print(removed); # 3。
print(numbers); # [1, 4, 2, 5]。
# del - 通过索引或切片删除。
del numbers[0];
print(numbers); # [4, 2, 5]。
del numbers[1:]; # 删除从索引1到结尾的所有元素。
print(numbers); # [4]。
# clear() - 清空列表。
numbers.clear();
print(numbers); # []。
3.4.3 查找元素
fruits = ["苹果", "香蕉", "橙子", "香蕉"]
# index() - 返回元素的索引位置
print(fruits.index("香蕉")) # 1 - 第一个"香蕉"的位置
print(fruits.index("香蕉", 2)) # 3 - 从索引2开始找
# count() - 统计元素出现的次数
print(fruits.count("香蕉")) # 2
print(fruits.count("葡萄")) # 0
3.4.4 排序和反转
numbers = [3, 1, 4, 1, 5, 9, 2];
# sort() - 原地排序(修改原列表)
numbers.sort();
print(numbers); # [1, 1, 2, 3, 4, 5, 9]
numbers.sort(reverse=True); # 降序排序
print(numbers); # [9, 5, 4, 3, 2, 1, 1]
# sorted() - 返回新列表,不修改原列表
numbers = [3, 1, 4, 1, 5, 9, 2];
new_numbers = sorted(numbers);
print(new_numbers); # [1, 1, 2, 3, 4, 5, 9]
print(numbers); # [3, 1, 4, 1, 5, 9, 2] - 原列表不变
# reverse() - 反转列表
fruits = ["苹果", "香蕉", "橙子"];
fruits.reverse();
print(fruits); # ['橙子', '香蕉', '苹果']
3.4.5 复制列表
original = [1, 2, 3]
# 错误的方式 - 这只是创建了引用
wrong_copy = original
wrong_copy[0] = 100
print(original) # [100, 2, 3] - 原列表也被修改了!
# 正确的方式
original = [1, 2, 3]
correct_copy = original.copy() # 或者 correct_copy = original[:]
correct_copy[0] = 100
print(original) # [1, 2, 3] - 原列表不变
print(correct_copy) # [100, 2, 3]
3.5 列表的遍历
3.5.1 使用for循环遍历( 详见第7章)
fruits = ["苹果", "香蕉", "橙子"]
# 直接遍历元素
for fruit in fruits:
print(f"我喜欢吃{fruit}")
# 遍历索引和元素
for i, fruit in enumerate(fruits):
print(f"第{i}个水果是:{fruit}")
运行结果:
我喜欢吃苹果
我喜欢吃香蕉
我喜欢吃橙子
第0个水果是:苹果
第1个水果是:香蕉
第2个水果是:橙子
3.5.2 使用while循环遍历( 详见第7章)
fruits = ["苹果", "香蕉", "橙子"]
i = 0
while i < len(fruits):
print(fruits[i])
i += 1
3.6 列表推导式
列表推导式是一种快速创建列表的方法:
# 创建1-10的平方列表
squares = [x**2 for x in range(1, 11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 带条件的列表推导式
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares) # [4, 16, 36, 64, 100]
# 对现有列表进行处理
fruits = [" apple ", "BANANA", "Orange"]
cleaned_fruits = [fruit.strip().lower() for fruit in fruits]
print(cleaned_fruits) # ['apple', 'banana', 'orange']
3.7 嵌套列表
列表中可以包含其他列表,形成多维列表:
# 二维列表(矩阵)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 访问二维列表中的元素
print(matrix[0][0]) # 1 - 第一行第一列
print(matrix[1][2]) # 6 - 第二行第三列
# 遍历二维列表
for row in matrix:
for num in row:
print(num, end=" ")
print() # 换行
# 输出:
# 1 2 3
# 4 5 6
# 7 8 9
3.8 列表的其他操作
3.8.1 列表拼接
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 使用 + 号拼接
combined = list1 + list2
print(combined) # [1, 2, 3, 4, 5, 6]
# 使用 * 号重复
repeated = list1 * 3
print(repeated) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
3.8.2 列表比较
list1 = [1, 2, 3];
list2 = [1, 2, 3];
list3 = [1, 2, 4];
print(list1 == list2); # True —— 元素相同。
print(list1 == list3); # False —— 元素不同。
print(list1 < list3); # True —— 逐个元素比较。
3.9 列表与字符串的转换
# 字符串转列表。
text = "hello world";
chars = list(text);
print(chars); # ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']。
words = text.split() # 按空格分割
print(words) # ['hello', 'world']
# 列表转字符串
fruits = ["苹果", "香蕉", "橙子"]
text1 = " ".join(fruits)
print(text1) # "苹果 香蕉 橙子"
text2 = "、".join(fruits)
print(text2) # "苹果、香蕉、橙子"
3.10 列表的应用场景
列表在编程中有广泛的应用:
# 1. 存储学生信息
students = ["张三", "李四", "王五"]
# 2. 记录考试成绩
scores = [85, 92, 78, 96, 88]
# 3. 管理待办事项
todo_list = ["写作业", "买菜", "洗衣服"]
# 4. 游戏中的角色列表
characters = ["战士", "法师", "射手"]
# 5. 数据分析中的数据集
data = [23, 45, 67, 89, 12, 34, 56]
本章笔记:
- 列表是一个可变的有序容器,可以存储多个元素。
- 列表支持索引和切片操作,可以方便地访问和修改元素。
- 列表有很多实用的方法,如添加、删除、查找、排序等。
- 列表推导式是创建列表的简洁方式。
- 列表可以嵌套,形成多维数据结构。
- 列表是可变的,需要注意浅拷贝和深拷贝的问题。
- 列表与字符串可以相互转换。
- 列表在编程中有广泛的应用,是Python中最常用的数据结构之一。