列表(List)
学习Python列表的创建、访问、修改和常用操作,掌握这个最灵活的数据容器。
基本概念
列表是Python中最常用的数据结构之一,它是一个有序、可变的元素集合,可以存储任意类型的数据。
列表的特点:
- 有序:元素按照插入顺序排序,可以通过索引访问
- 可变:可以添加、删除和修改元素
- 异构:可以存储不同类型的数据
- 可重复:可以包含重复的元素
列表的表示:用方括号 [] 包围元素,元素之间用逗号分隔。
empty_list = []
# 创建一个包含整数的列表
numbers = [1, 2, 3, 4, 5]
# 创建一个包含不同类型元素的列表
mixed_list = [1, "hello", 3.14, True]
访问列表元素
可以使用索引来访问列表中的元素。Python的索引从0开始,也支持负数索引(从末尾开始计数)。
fruits = ["apple", "banana", "orange", "grape", "mango"]
# 访问第一个元素(索引为0)
print(fruits[0]) # 输出: apple
# 访问第三个元素
print(fruits[2]) # 输出: orange
# 使用负数索引访问最后一个元素
print(fruits[-1]) # 输出: mango
# 使用负数索引访问倒数第三个元素
print(fruits[-3]) # 输出: orange
还可以使用切片操作来访问列表的一部分:
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 访问索引1到3的元素(不包含索引4)
print(numbers[1:4]) # 输出: [1, 2, 3]
# 访问从索引2开始到末尾的所有元素
print(numbers[2:]) # 输出: [2, 3, 4, 5, 6, 7, 8, 9]
# 访问从开头到索引5的元素(不包含索引5)
print(numbers[:5]) # 输出: [0, 1, 2, 3, 4]
# 访问所有元素
print(numbers[:]) # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 使用步长为2访问元素
print(numbers[1:8:2]) # 输出: [1, 3, 5, 7]
修改列表元素
列表是可变的,可以修改、添加和删除元素。
修改元素:
fruits = ["apple", "banana", "orange", "grape"]
# 修改第二个元素
fruits[1] = "pear"
print(fruits) # 输出: ['apple', 'pear', 'orange', 'grape']
# 使用切片修改多个元素
fruits[2:] = ["watermelon", "strawberry"]
print(fruits) # 输出: ['apple', 'pear', 'watermelon', 'strawberry']
添加元素:
numbers = [1, 2, 3]
# 在末尾添加一个元素
numbers.append(4)
print(numbers) # 输出: [1, 2, 3, 4]
# 在指定位置插入一个元素
numbers.insert(1, 1.5)
print(numbers) # 输出: [1, 1.5, 2, 3, 4]
# 合并另一个列表
numbers.extend([5, 6])
print(numbers) # 输出: [1, 1.5, 2, 3, 4, 5, 6]
删除元素:
fruits = ["apple", "banana", "orange", "grape", "mango"]
# 根据索引删除元素
del fruits[1]
print(fruits) # 输出: ['apple', 'orange', 'grape', 'mango']
# 删除指定值的元素
fruits.remove("orange")
print(fruits) # 输出: ['apple', 'grape', 'mango']
# 弹出并返回最后一个元素
last_fruit = fruits.pop()
print(last_fruit) # 输出: mango
print(fruits) # 输出: ['apple', 'grape']
# 弹出并返回指定索引的元素
first_fruit = fruits.pop(0)
print(first_fruit) # 输出: apple
print(fruits) # 输出: ['grape']
# 清空列表
fruits.clear()
print(fruits) # 输出: []
列表常用方法
Python列表提供了许多有用的方法,可以方便地操作列表。
append()
向列表末尾添加一个元素
extend()
将另一个列表的所有元素添加到当前列表末尾
insert()
在指定位置插入一个元素
remove()
删除指定值的第一个出现的元素
pop()
删除并返回指定索引的元素(默认为最后一个)
clear()
删除列表中的所有元素
index()
返回指定值的第一个出现的索引
count()
返回指定值在列表中出现的次数
sort()
对列表进行排序(原地修改)
reverse()
反转列表中的元素顺序(原地修改)
copy()
创建列表的浅拷贝
示例:使用sort()和reverse()方法
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
# 排序(从小到大)
numbers.sort()
print(numbers) # 输出: [1, 1, 2, 3, 4, 5, 6, 9]
# 排序(从大到小)
numbers.sort(reverse=True)
print(numbers) # 输出: [9, 6, 5, 4, 3, 2, 1, 1]
# 反转列表
numbers.reverse()
print(numbers) # 输出: [1, 1, 2, 3, 4, 5, 6, 9]
故事化案例:小明的购物清单
小明要去超市购物,他需要创建一个购物清单,记录他需要购买的物品。让我们用Python列表来帮助他管理购物清单。
场景:小明的购物清单
- 创建购物清单
- 添加新物品
- 删除已购买的物品
- 检查物品是否在清单中
- 计算需要购买的物品数量
代码实现:
shopping_list = ["苹果", "香蕉", "牛奶", "面包", "鸡蛋"]
print("初始购物清单:", shopping_list)
# 添加新物品
shopping_list.append("大米")
shopping_list.append("蔬菜")
print("添加物品后的清单:", shopping_list)
# 在指定位置插入物品
shopping_list.insert(2, "橙子")
print("插入物品后的清单:", shopping_list)
# 检查物品是否在清单中
if "牛奶" in shopping_list:
print("需要购买牛奶")
# 计算需要购买的物品数量
item_count = len(shopping_list)
print(f"购物清单中共有{item_count}件物品")
# 删除已购买的物品
shopping_list.remove("香蕉")
print("购买香蕉后的清单:", shopping_list)
# 清空购物清单(表示所有物品都已购买)
shopping_list.clear()
print("购物完成后的清单:", shopping_list)
运行上面的代码,输出结果为:
初始购物清单:['苹果', '香蕉', '牛奶', '面包', '鸡蛋']
添加物品后的清单:['苹果', '香蕉', '牛奶', '面包', '鸡蛋', '大米', '蔬菜']
插入物品后的清单:['苹果', '香蕉', '橙子', '牛奶', '面包', '鸡蛋', '大米', '蔬菜']
需要购买牛奶
购物清单中共有8件物品
购买香蕉后的清单:['苹果', '橙子', '牛奶', '面包', '鸡蛋', '大米', '蔬菜']
购物完成后的清单:[]
练习题
1 列表操作练习
1. 创建一个包含10个整数的列表 2. 计算列表中所有元素的和与平均值 3. 找出列表中的最大值和最小值 4. 将列表元素反转 5. 删除列表中所有的偶数
numbers = [10, 23, 45, 12, 67, 89, 34, 56, 78, 9]
# 计算列表中所有元素的和与平均值
sum_numbers = sum(numbers)
average = sum_numbers / len(numbers)
print(f"和: {sum_numbers}, 平均值: {average:.2f}")
# 找出列表中的最大值和最小值
max_number = max(numbers)
min_number = min(numbers)
print(f"最大值: {max_number}, 最小值: {min_number}")
# 将列表元素反转
numbers.reverse()
print("反转后的列表: ", numbers)
# 删除列表中所有的偶数
odd_numbers = [num for num in numbers if num % 2 != 0]
print("删除偶数后的列表: ", odd_numbers)
2 字符串列表处理
1. 创建一个包含5个字符串的列表 2. 将所有字符串转换为大写 3. 按字符串长度排序 4. 找出包含特定字符的字符串
words = ["apple", "banana", "orange", "grape", "kiwi"]
# 将所有字符串转换为大写
upper_words = [word.upper() for word in words]
print("大写字符串: ", upper_words)
# 按字符串长度排序
sorted_by_length = sorted(words, key=len)
print("按长度排序: ", sorted_by_length)
# 找出包含特定字符的字符串
char = "a"
contains_char = [word for word in words if char in word]
print(f"包含字符'{char}'的字符串: {contains_char}")
3 嵌套列表处理
1. 创建一个嵌套列表,表示一个3x3的矩阵 2. 计算矩阵所有元素的和 3. 找出矩阵中的最大值 4. 将矩阵转置(行变列,列变行)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 计算矩阵所有元素的和
total_sum = 0
for row in matrix:
total_sum += sum(row)
print(f"矩阵元素的和: {total_sum}")
# 找出矩阵中的最大值
max_value = matrix[0][0]
for row in matrix:
for value in row:
if value > max_value:
max_value = value
print(f"矩阵中的最大值: {max_value}")
# 将矩阵转置
transposed = []
for i in range(len(matrix[0])):
new_row = []
for row in matrix:
new_row.append(row[i])
transposed.append(new_row)
print("转置后的矩阵: ", transposed)
# 更简洁的转置方法
transposed_short = list(zip(*matrix))
print("转置后的矩阵(简洁方法): ", transposed_short)