知识点概述
增删改查、遍历、列表推导式
学习Python中最常用的数据结构——列表,掌握如何存储、访问和操作有序的数据集合。
详细讲解
列表基础
列表是Python中最常用的数据结构,用于存储有序的元素集合,可以包含不同类型的元素。
创建列表:
- 使用方括号:
list1 = [1, 2, 3] - 使用list()函数:
list2 = list("abc") - 空列表:
empty_list = [] - 列表可以包含不同类型的元素:
mixed = [1, "hello", 3.14, True]
访问列表元素:
- 通过索引访问:
list[0]访问第一个元素(索引从0开始) - 负数索引:
list[-1]访问最后一个元素,list[-2]访问倒数第二个 - 列表切片:
list[start:end:step]list[1:4]:获取索引1到3的元素list[:3]:获取前3个元素list[2:]:从索引2开始到结束list[::2]:每隔一个元素取一个list[::-1]:反转列表
修改列表:
- 修改元素:
list[0] = "new" - 添加元素:
append():在末尾添加单个元素insert(index, element):在指定位置插入元素extend():合并另一个列表
- 删除元素:
remove(value):删除指定值的第一个匹配项pop():删除并返回指定位置的元素(默认最后一个)del list[index]:删除指定位置或切片clear():清空列表
列表遍历:
- 使用for循环:
for item in list: - 使用while循环和索引
- 使用enumerate同时获取索引和值:
for i, item in enumerate(list): - 使用zip遍历多个列表:
for a, b in zip(list1, list2):
列表推导式:
列表推导式提供了一种简洁的方法来创建列表。
- 基本语法:
[expression for item in iterable] - 带条件过滤:
[expression for item in iterable if condition] - 嵌套循环:
[x+y for x in list1 for y in list2] - 示例:
squares = [x**2 for x in range(10)]evens = [x for x in range(100) if x % 2 == 0]pairs = [(x, y) for x in range(3) for y in range(3)]
列表排序和操作:
sort():原地排序列表sorted():返回排序后的新列表reverse():反转列表len():获取列表长度count():统计元素出现次数index():查找元素第一次出现的位置copy():复制列表
代码示例
lists.py
# 列表操作示例
# 创建列表
fruits = ["苹果", "香蕉", "橙子", "葡萄", "草莓"]
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
mixed = ["Python", 3.14, True, 100, "Hello"]
print("原始水果列表:", fruits)
print("数字列表:", numbers)
# 访问列表元素
print("\n=== 访问元素 ===")
print("第一个水果:", fruits[0])
print("最后一个水果:", fruits[-1])
print("前三个水果:", fruits[:3])
print("倒数第二个水果:", fruits[-2])
print("从第二个到第四个水果:", fruits[1:4])
# 修改列表元素
print("\n=== 修改元素 ===")
fruits[1] = "芒果"
print("修改后的列表:", fruits)
# 添加元素
print("\n=== 添加元素 ===")
fruits.append("西瓜") # 在末尾添加
print("添加西瓜后:", fruits)
fruits.insert(2, "桃子") # 在索引2处插入
print("插入桃子后:", fruits)
fruits.extend(["菠萝", "樱桃"]) # 扩展列表
print("扩展列表后:", fruits)
# 删除元素
print("\n=== 删除元素 ===")
removed = fruits.pop() # 删除并返回最后一个元素
print(f"删除的元素: {removed}")
print("删除后列表:", fruits)
removed = fruits.pop(1) # 删除索引1的元素
print(f"删除索引1的元素: {removed}")
print("删除后列表:", fruits)
fruits.remove("橙子") # 删除指定值
print("删除橙子后:", fruits)
del fruits[0] # 删除第一个元素
print("删除第一个元素后:", fruits)
# 列表遍历
print("\n=== 列表遍历 ===")
print("直接遍历:")
for fruit in fruits:
print(f" - {fruit}")
print("\n使用enumerate获取索引:")
for i, fruit in enumerate(fruits):
print(f" 索引{i}: {fruit}")
print("\n使用while循环遍历:")
i = 0
while i < len(fruits):
print(f" {i}: {fruits[i]}")
i += 1
# 列表推导式
print("\n=== 列表推导式 ===")
squares = [x**2 for x in range(1, 6)]
print("1-5的平方:", squares)
even_numbers = [x for x in range(1, 11) if x % 2 == 0]
print("1-10的偶数:", even_numbers)
words = ["hello", "world", "python", "programming"]
capitalized = [word.upper() for word in words]
print("大写单词:", capitalized)
# 列表排序
print("\n=== 列表排序 ===")
numbers = [5, 2, 9, 1, 7, 3]
numbers.sort() # 升序排序
print("升序排序:", numbers)
numbers.sort(reverse=True) # 降序排序
print("降序排序:", numbers)
sorted_numbers = sorted(numbers) # 返回新列表
print("排序后新列表:", sorted_numbers)
print("原列表不变:", numbers)
# 列表常用方法
print("\n=== 列表常用方法 ===")
colors = ["red", "green", "blue", "green", "yellow"]
print("颜色列表:", colors)
print("green出现次数:", colors.count("green"))
print("green第一次出现的位置:", colors.index("green"))
colors.reverse() # 反转列表
print("反转后:", colors)
colors.clear() # 清空列表
print("清空后:", colors)
输出结果:
原始水果列表: ['苹果', '香蕉', '橙子', '葡萄', '草莓'] 数字列表: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] === 访问元素 === 第一个水果: 苹果 最后一个水果: 草莓 前三个水果: ['苹果', '香蕉', '橙子'] 倒数第二个水果: 葡萄 从第二个到第四个水果: ['香蕉', '橙子', '葡萄'] === 修改元素 === 修改后的列表: ['苹果', '芒果', '橙子', '葡萄', '草莓'] === 添加元素 === 添加西瓜后: ['苹果', '芒果', '橙子', '葡萄', '草莓', '西瓜'] 插入桃子后: ['苹果', '芒果', '桃子', '橙子', '葡萄', '草莓', '西瓜'] 扩展列表后: ['苹果', '芒果', '桃子', '橙子', '葡萄', '草莓', '西瓜', '菠萝', '樱桃'] === 删除元素 === 删除的元素: 樱桃 删除后列表: ['苹果', '芒果', '桃子', '橙子', '葡萄', '草莓', '西瓜', '菠萝'] 删除索引1的元素: 芒果 删除后列表: ['苹果', '桃子', '橙子', '葡萄', '草莓', '西瓜', '菠萝'] 删除橙子后: ['苹果', '桃子', '葡萄', '草莓', '西瓜', '菠萝'] 删除第一个元素后: ['桃子', '葡萄', '草莓', '西瓜', '菠萝'] === 列表遍历 === 直接遍历: - 桃子 - 葡萄 - 草莓 - 西瓜 - 菠萝 使用enumerate获取索引: 索引0: 桃子 索引1: 葡萄 索引2: 草莓 索引3: 西瓜 索引4: 菠萝 使用while循环遍历: 0: 桃子 1: 葡萄 2: 草莓 3: 西瓜 4: 菠萝 === 列表推导式 === 1-5的平方: [1, 4, 9, 16, 25] 1-10的偶数: [2, 4, 6, 8, 10] 大写单词: ['HELLO', 'WORLD', 'PYTHON', 'PROGRAMMING'] === 列表排序 === 升序排序: [1, 2, 3, 5, 7, 9] 降序排序: [9, 7, 5, 3, 2, 1] 排序后新列表: [1, 2, 3, 5, 7, 9] 原列表不变: [9, 7, 5, 3, 2, 1] === 列表常用方法 === 颜色列表: ['red', 'green', 'blue', 'green', 'yellow'] green出现次数: 2 green第一次出现的位置: 1 反转后: ['yellow', 'green', 'blue', 'green', 'red'] 清空后: []
学习提示
1
列表索引从0开始,不是从1开始。
2
列表推导式可以更简洁地创建新列表,但复杂的推导式可能降低可读性。
3
sort()方法会修改原列表,sorted()函数返回新列表。
4
使用切片可以方便地获取列表的子集或创建副本。
练习题
练习 1
中等
创建一个学生成绩列表,计算平均分、最高分和最低分。
使用sum()函数计算总和,len()获取长度,max()和min()找最值。
练习 2
中等
编写程序找出列表中的重复元素。
可以使用集合或遍历列表计数的方法。
练习 3
困难
使用列表推导式创建一个1到20的平方数列表。
列表推导式格式:[x**2 for x in range(1, 21)]
练习 4
困难
编写一个函数,接受一个列表作为参数,返回去重后的新列表。
可以使用集合(set)去重,但会丢失顺序。可以使用字典保持顺序。
知识点总结
本课要点:
- 掌握列表的创建和基本操作
- 熟练使用索引和切片访问列表元素
- 理解列表的增删改查方法
- 学会使用列表推导式创建新列表