跳到主要内容

Python 列表方法

介绍

Python列表是最常用的数据结构之一,它允许我们存储不同类型的元素序列。列表是可变的(mutable),这意味着我们可以在创建后修改它们。Python提供了丰富的内置方法来操作列表,使得列表操作变得简单高效。

在本教程中,我们将详细介绍Python列表的各种方法,包括如何添加、删除、排序列表元素,以及其他常用操作。

创建列表

在深入了解列表方法之前,让我们先回顾如何创建列表:

python
# 空列表
empty_list = []

# 包含整数的列表
numbers = [1, 2, 3, 4, 5]

# 包含不同类型元素的列表
mixed = [1, "Hello", 3.14, True]

# 使用list()函数创建列表
another_list = list("Python")
print(another_list) # ['P', 'y', 't', 'h', 'o', 'n']

添加元素的方法

1. append() - 在列表末尾添加元素

append()方法向列表末尾添加一个元素。

python
fruits = ["apple", "banana"]
fruits.append("cherry")
print(fruits) # ['apple', 'banana', 'cherry']

2. insert() - 在指定位置插入元素

insert()方法在指定索引位置插入元素。

python
fruits = ["apple", "banana"]
fruits.insert(1, "orange")
print(fruits) # ['apple', 'orange', 'banana']

3. extend() - 合并列表

extend()方法将另一个列表(或任何可迭代对象)的所有元素添加到当前列表的末尾。

python
fruits = ["apple", "banana"]
more_fruits = ["cherry", "kiwi"]
fruits.extend(more_fruits)
print(fruits) # ['apple', 'banana', 'cherry', 'kiwi']

# 与加号运算符的区别
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = list1 + list2 # 创建新列表
list1.extend(list2) # 修改list1
print(list3) # [1, 2, 3, 4, 5, 6]
print(list1) # [1, 2, 3, 4, 5, 6]

删除元素的方法

1. remove() - 删除指定值的元素

remove()方法删除列表中第一个匹配的元素值。

python
fruits = ["apple", "banana", "cherry", "banana"]
fruits.remove("banana")
print(fruits) # ['apple', 'cherry', 'banana']

# 如果元素不存在,会引发ValueError
try:
fruits.remove("mango")
except ValueError:
print("元素不存在") # 元素不存在

2. pop() - 删除并返回指定位置的元素

pop()方法删除并返回指定索引位置的元素。如果未指定索引,则删除并返回最后一个元素。

python
fruits = ["apple", "banana", "cherry"]
last_fruit = fruits.pop()
print(last_fruit) # cherry
print(fruits) # ['apple', 'banana']

first_fruit = fruits.pop(0)
print(first_fruit) # apple
print(fruits) # ['banana']

3. clear() - 清空列表

clear()方法删除列表中的所有元素。

python
fruits = ["apple", "banana", "cherry"]
fruits.clear()
print(fruits) # []

4. del 语句 - 删除元素或整个列表

del语句可以删除列表中的单个元素、切片或整个列表。

python
fruits = ["apple", "banana", "cherry", "date"]
del fruits[1]
print(fruits) # ['apple', 'cherry', 'date']

del fruits[1:3]
print(fruits) # ['apple']

# 删除整个列表
del fruits
# print(fruits) # 会引发NameError,因为fruits已经不存在

查找和计数方法

1. index() - 查找元素的索引

index()方法返回列表中第一个匹配元素的索引。

python
fruits = ["apple", "banana", "cherry", "banana"]
position = fruits.index("banana")
print(position) # 1

# 指定开始和结束范围
position = fruits.index("banana", 2) # 从索引2开始查找
print(position) # 3

# 如果元素不存在,会引发ValueError
try:
position = fruits.index("mango")
except ValueError:
print("元素不存在") # 元素不存在

2. count() - 计算元素出现的次数

count()方法返回指定元素在列表中出现的次数。

python
fruits = ["apple", "banana", "cherry", "banana"]
count = fruits.count("banana")
print(count) # 2

count = fruits.count("mango")
print(count) # 0 (不存在的元素返回0)

排序方法

1. sort() - 对列表进行排序

sort()方法对列表进行原地排序,默认为升序。

python
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 9]

# 降序排序
numbers.sort(reverse=True)
print(numbers) # [9, 5, 4, 3, 2, 1, 1]

# 使用key参数自定义排序标准
fruits = ["apple", "Banana", "cherry"]
fruits.sort()
print(fruits) # ['Banana', 'apple', 'cherry'] (默认按ASCII值排序)

fruits.sort(key=str.lower) # 不区分大小写
print(fruits) # ['apple', 'Banana', 'cherry']

2. reverse() - 反转列表

reverse()方法反转列表中的元素顺序。

python
fruits = ["apple", "banana", "cherry"]
fruits.reverse()
print(fruits) # ['cherry', 'banana', 'apple']

其他常用方法

1. copy() - 复制列表

copy()方法创建列表的浅拷贝。

python
fruits = ["apple", "banana", "cherry"]
new_fruits = fruits.copy()
fruits.append("date")
print(fruits) # ['apple', 'banana', 'cherry', 'date']
print(new_fruits) # ['apple', 'banana', 'cherry']
注意

浅拷贝只复制一级元素,嵌套对象仍然是引用!如果需要深拷贝,请使用copy模块的deepcopy()函数。

2. len() - 获取列表长度

len()函数返回列表中的元素数量。

python
fruits = ["apple", "banana", "cherry"]
length = len(fruits)
print(length) # 3

实际应用案例

案例1:待办事项列表

python
def todo_list_manager():
tasks = []

# 添加任务
tasks.append("完成Python作业")
tasks.append("阅读编程书籍")
tasks.append("准备明天的会议")

print("待办事项:")
for i, task in enumerate(tasks, 1):
print(f"{i}. {task}")

# 完成任务
completed_task = tasks.pop(1) # 完成第二项任务
print(f"\n已完成: {completed_task}")

# 添加紧急任务
tasks.insert(0, "回复重要邮件")

print("\n更新后的待办事项:")
for i, task in enumerate(tasks, 1):
print(f"{i}. {task}")

todo_list_manager()

输出:

待办事项:
1. 完成Python作业
2. 阅读编程书籍
3. 准备明天的会议

已完成: 阅读编程书籍

更新后的待办事项:
1. 回复重要邮件
2. 完成Python作业
3. 准备明天的会议

案例2:学生成绩排序

python
def process_student_scores():
student_scores = [
{"name": "Alice", "score": 85},
{"name": "Bob", "score": 92},
{"name": "Charlie", "score": 78},
{"name": "David", "score": 95},
{"name": "Eva", "score": 88}
]

# 按分数排序(升序)
student_scores.sort(key=lambda student: student["score"])
print("按分数升序排列:")
for student in student_scores:
print(f"{student['name']}: {student['score']}")

# 按分数排序(降序)
student_scores.sort(key=lambda student: student["score"], reverse=True)
print("\n按分数降序排列 (前3名):")
for student in student_scores[:3]:
print(f"{student['name']}: {student['score']}")

process_student_scores()

输出:

按分数升序排列:
Charlie: 78
Alice: 85
Eva: 88
Bob: 92
David: 95

按分数降序排列 (前3名):
David: 95
Bob: 92
Eva: 88

列表方法性能考虑

不同的列表方法在性能上有差异。了解这些差异有助于编写高效的代码。

提示
  • 在列表末尾添加或删除元素(append()pop())是O(1)操作,非常高效
  • 在列表开头或中间插入或删除元素(insert()remove()pop(index))是O(n)操作,因为需要移动元素
  • 对于频繁在两端操作的场景,可以考虑使用collections.deque(双端队列)

总结

Python列表方法提供了丰富的功能,使得列表操作变得简单高效:

  1. 添加元素append()insert()extend()
  2. 删除元素remove()pop()clear()del语句
  3. 查找和计数index()count()
  4. 排序和反转sort()reverse()
  5. 其他操作copy()len()

掌握这些方法可以大大提高你处理数据的能力,是Python编程中的基本技能。

练习题

  1. 编写一个函数,接受两个列表作为参数,返回一个新列表,其中包含两个输入列表的共同元素(即交集)。
  2. 创建一个购物清单程序,允许用户添加、删除、查看和清空购物列表。
  3. 编写一个函数,移除列表中的所有重复元素,但保持元素的原始顺序。
  4. 实现一个简单的字母频率计数器,统计一个字符串中每个字母出现的次数。

附加资源

  • Python官方文档: Python列表方法
  • 想了解更多高级数据结构,可以学习Python的collections模块
  • 掌握了列表操作后,可以进一步学习列表推导式(List Comprehensions)来简化代码

Happy coding! 祝你的Python之旅顺利!