一、列表的高级操作
除了基础操作,Python 还为列表提供了排序、反转、拼接等高级功能,进一步提升开发效率。
1. 列表排序
sort():对列表原地排序(修改原列表),默认升序,可通过reverse=True设置降序,支持key参数自定义排序规则。sorted():返回排序后的新列表,原列表不变,参数与sort()一致。
scores = [85, 92, 78, 90, 88]
# sort()原地升序排序
scores.sort()
print(scores) # 输出:[78, 85, 88, 90, 92]
# sort()原地降序排序
scores.sort(reverse=True)
print(scores) # 输出:[92, 90, 88, 85, 78]
# 自定义key排序:按字符串长度排序
words = ["apple", "banana", "cherry", "date"]
words.sort(key=len)
print(words) # 输出:['date', 'apple', 'banana', 'cherry']
# sorted()返回新列表
nums = [3, 1, 4, 2]
sorted_nums = sorted(nums, reverse=True)
print(sorted_nums) # 输出:[4, 3, 2, 1]
print(nums) # 原列表不变,输出:[3, 1, 4, 2]
2. 列表反转
reverse():对列表原地反转(修改原列表)。- 切片
[::-1]:返回反转后的新列表,原列表不变。
letters = ["a", "b", "c", "d"]
# reverse()原地反转
letters.reverse()
print(letters) # 输出:['d', 'c', 'b', 'a']
# 切片反转(新列表)
new_letters = letters[::-1]
print(new_letters) # 输出:['a', 'b', 'c', 'd']
print(letters) # 原列表不变,输出:['d', 'c', 'b', 'a']
3. 列表拼接与重复
+:拼接两个列表,返回新列表。*:将列表重复指定次数,返回新列表。
list1 = [1, 2]
list2 = [3, 4]
# 列表拼接
print(list1 + list2) # 输出:[1, 2, 3, 4]
# 列表重复
print(list1 * 3) # 输出:[1, 2, 1, 2, 1, 2]
4. 列表的复制
由于列表是可变对象,直接赋值(如new_list = old_list)只是传递引用,修改新列表会同步影响原列表。如需创建独立的副本,可使用以下方法:
- 切片
[:]:创建浅拷贝。 list()构造函数:创建浅拷贝。copy()方法:创建浅拷贝。
old = [1, 2, [3, 4]]
# 直接赋值,引用同一对象
new1 = old
new1[0] = 99
print(old) # 输出:[99, 2, [3, 4]]
# 切片拷贝(浅拷贝)
new2 = old[:]
new2[1] = 88
print(old) # 原列表不变,输出:[99, 2, [3, 4]]
new2[2][0] = 77
print(old) # 嵌套列表同步修改,输出:[99, 2, [77, 4]](浅拷贝特性)
注:浅拷贝仅复制列表的第一层元素,嵌套的可变对象(如子列表、字典)仍为引用;如需深拷贝,需使用
copy模块的deepcopy()方法。
二、列表的实战应用场景
列表的灵活性使其在 Python 开发中无处不在,以下是几个典型的实战场景:
1. 存储并处理用户输入
收集多个用户输入的信息,存入列表后进行统一处理。
# 收集3个用户的姓名
names = []
for i in range(3):
name = input(f"请输入第{i+1}个姓名:")
names.append(name)
# 输出所有姓名
print("已收集的姓名:", names)
# 按字母顺序排序后输出
names.sort()
print("排序后的姓名:", names)
2. 数据过滤与转换
通过列表推导式快速过滤和转换数据,替代繁琐的循环。
# 原始数据:学生成绩(姓名,分数)
scores = [("Alice", 85), ("Bob", 60), ("Charlie", 92), ("David", 73)]
# 过滤出分数≥80的学生
high_scores = [name for name, score in scores if score >= 80]
print("高分学生:", high_scores) # 输出:['Alice', 'Charlie']
# 转换为分数的平方(模拟数据处理)
score_squares = [score ** 2 for _, score in scores]
print("分数平方:", score_squares) # 输出:[7225, 3600, 8464, 5329]
3. 栈与队列的实现
列表可模拟栈(先进后出)和队列(先进先出)的基本操作:
- 栈:用
append()入栈,pop()出栈(默认删除最后一个元素)。 - 队列:用
append()入队,pop(0)出队(删除第一个元素,效率较低,大数据量建议用collections.deque)。
# 模拟栈
stack = []
stack.append(1)
stack.append(2)
stack.append(3)
print(stack.pop()) # 出栈:3
print(stack) # 输出:[1, 2]
# 模拟队列
queue = []
queue.append("a")
queue.append("b")
queue.append("c")
print(queue.pop(0)) # 出队:a
print(queue) # 输出:['b', 'c']
三、总结
Python 列表作为核心数据结构,以有序、可变、元素多样化的特性,成为处理有序数据的核心工具。这两篇文章从基础的创建、访问,到进阶的增删改查、排序反转,再到实战场景的应用,全面覆盖了列表的使用要点。
掌握列表的关键在于理解其可变性和索引 / 切片机制,并灵活运用列表推导式、内置方法提升开发效率。同时需注意浅拷贝与深拷贝的区别,以及列表在模拟栈 / 队列时的效率问题(大数据量推荐collections.deque)。
列表与元组、字典、集合等其他 Python 数据结构相辅相成,在实际开发中,需根据数据的特性(如是否可变、是否需要键值对)选择合适的结构,才能写出更高效、更优雅的 Python 代码。
我们下篇文章再见!🌹