知识点概述

增删改查、遍历、列表推导式

学习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)去重,但会丢失顺序。可以使用字典保持顺序。

知识点总结

本课要点:

  • 掌握列表的创建和基本操作
  • 熟练使用索引和切片访问列表元素
  • 理解列表的增删改查方法
  • 学会使用列表推导式创建新列表

下一课预告:

在下一课中,我们将学习字典,了解键值对数据结构的使用。

预览下一课