python列表与元组--python005

深入理解列表与元组 ------ Python 序列结构全面解析

一、引言

Python 是一种简洁而强大的编程语言,其中「序列类型」(Sequence Types)是核心数据结构之一。列表(list)和元组(tuple)是最常用的两种序列结构。它们在日常编程、数据分析、Web开发、甚至机器学习场景中都扮演着重要角色。本章将深入解析 Python 的列表和元组,涵盖它们的定义、操作方法、常用算法、使用技巧及性能对比等,帮助读者不仅"能用",更能"用好"。


二、列表(List)

2.1 列表的定义与基本概念

列表是 Python 中最常用的可变序列,使用中括号 [] 来定义,内部元素可以是任意类型,甚至嵌套其他列表。

复制代码
my_list = [1, "hello", 3.14, True]

特点:

  • 支持元素重复;

  • 支持索引访问(正向和负向);

  • 支持切片;

  • 支持动态修改、删除和添加元素;

  • 支持任意类型混合。

2.2 增加元素

Python 提供多种方式添加列表元素:

  • append(x):在末尾追加单个元素

  • insert(i, x):在索引 i 位置插入元素 x

  • extend(iterable):将其他可迭代对象拆分并追加到当前列表末尾

  • 使用 + 操作符拼接两个列表

示例:

复制代码
lst = [1, 2, 3]
lst.append(4)           # [1, 2, 3, 4]
lst.insert(1, 'a')      # [1, 'a', 2, 3, 4]
lst.extend([5, 6])      # [1, 'a', 2, 3, 4, 5, 6]

2.3 查找元素

  • in 运算符:判断是否存在

  • index(x):返回首次出现的索引(若不存在则抛异常)

  • 切片、for 循环迭代等方式遍历列表

    lst = [10, 20, 30]
    20 in lst # True
    lst.index(30) # 2

2.4 修改元素

通过索引直接修改指定位置的值:

复制代码
lst = [1, 2, 3]
lst[0] = 100       # [100, 2, 3]

还可通过切片批量修改:

复制代码
lst[1:] = [200, 300]   # [100, 200, 300]

2.5 删除元素

  • pop([i]):删除并返回索引 i 的元素,默认删除最后一个

  • remove(x):删除首次出现的值为 x 的元素

  • del lst[i]:使用 del 关键字按索引删除

  • clear():清空列表

示例:

复制代码
lst = [1, 2, 3, 2]
lst.pop()           # 删除 3
lst.remove(2)       # 删除第一个 2
del lst[0]          # 删除索引为 0 的元素
lst.clear()         # 列表变空

2.6 合并列表

  • 使用 +:创建新列表

  • 使用 extend():原地修改原列表

    a = [1, 2]
    b = [3, 4]
    c = a + b # 不影响 a、b
    a.extend(b) # a 变为 [1, 2, 3, 4]

2.7 排序与反转

  • sort():原地排序(可传 key 和 reverse)

  • sorted():返回新排序列表

  • reverse():原地反转

  • reversed():返回反转迭代器

    lst = [3, 1, 2]
    lst.sort() # [1, 2, 3]
    sorted(lst) # [1, 2, 3]
    lst.reverse() # [3, 2, 1]


三、基于列表的常见算法

3.1 冒泡排序

冒泡排序是一种朴素但易于理解的排序算法:

复制代码
def bubble_sort(lst):
    n = len(lst)
    for i in range(n - 1):
        for j in range(n - i - 1):
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]

时间复杂度:O(n²)

虽然效率不高,但对学习算法思想很有帮助。现代开发中更多使用 sorted() 或其他更高效算法如 Timsort、快速排序等。

3.2 列表推导式(List Comprehension)

Python 强大的表达式方式之一,可用于快速构建或处理列表。

复制代码
squares = [x**2 for x in range(10)]  # [0, 1, 4, 9, ..., 81]

四、元组(Tuple)

4.1 基础概念

元组是 不可变的序列 ,使用小括号 () 定义:

复制代码
t = (1, 2, 3)

与列表的区别:

特性 列表 list 元组 tuple
可变性 可变(mutable) 不可变(immutable)
表示方式 [] ()
使用场景 临时数据、多变数据结构 不变数据结构、作为字典键等

即使只有一个元素的元组,也要加逗号:

复制代码
singleton = (1,)    # 正确
not_a_tuple = (1)   # 实际是 int

4.2 元组操作

  • 支持索引访问和切片

  • 支持 in 运算符

  • 支持嵌套、迭代

    t = (1, 2, [3, 4])
    t[2][0] = 99 # 虽然元组不可变,但其元素若是可变对象仍可变

4.3 应用场景

  • 用于函数返回多个值

  • 用作字典的键

  • 用于集合中元素(可哈希)


五、列表 vs 元组:何时使用?

场景 推荐结构
需要频繁修改元素 列表
固定结构,不可变数据(如坐标) 元组
作为字典键 元组
占用空间小、性能更好 元组(更快,内存更少)

性能对比(在大量操作中):

复制代码
import timeit
print(timeit.timeit('[1, 2, 3, 4, 5]', number=1000000))  # 慢
print(timeit.timeit('(1, 2, 3, 4, 5)', number=1000000))  # 快

六、实际案例与最佳实践

6.1 多变量赋值

复制代码
x, y = (1, 2)

6.2 函数返回多个值

复制代码
def get_stats(data):
    return min(data), max(data)

min_val, max_val = get_stats([1, 2, 3])

6.3 排序自定义对象列表

复制代码
people = [('Tom', 25), ('Jerry', 22)]
people.sort(key=lambda x: x[1])  # 按年龄排序

七、总结

  • 列表和元组是 Python 中最基本、最常用的容器类型;

  • 列表强调灵活性和操作性,适用于动态变化的数据集合;

  • 元组强调结构与稳定性,适用于固定数据结构、函数返回、字典键等场景;

  • 掌握各类操作方法(添加、查找、修改、删除、排序)对日常开发至关重要;

  • 熟悉列表推导式、元组打包/解包等高级语法,有助于写出更简洁、优雅的 Python 代码;

  • 在实际开发中,要根据具体需求选择合适的容器类型,从而写出性能高、结构清晰的代码。

相关推荐
一只小风华~44 分钟前
JavaScript 函数
开发语言·前端·javascript·ecmascript·web
苕皮蓝牙土豆1 小时前
Qt 分裂布局:QSplitter 使用指南
开发语言·qt
仰望星空的凡人2 小时前
【JS逆向基础】数据库之MongoDB
javascript·数据库·python·mongodb
F_D_Z3 小时前
【PyTorch】图像多分类项目部署
人工智能·pytorch·python·深度学习·分类
Brookty4 小时前
Java线程安全与中断机制详解
java·开发语言·后端·学习·java-ee
pingzhuyan4 小时前
python入门篇12-虚拟环境conda的安装与使用
python·ai·llm·ocr·conda
香蕉可乐荷包蛋4 小时前
排序算法 (Sorting Algorithms)-Python示例
python·算法·排序算法
從南走到北5 小时前
JAVA东郊到家按摩服务同款同城家政服务按摩私教茶艺师服务系统小程序+公众号+APP+H5
android·java·开发语言·微信小程序·小程序
遇见尚硅谷5 小时前
C语言:20250728学习(指针)
c语言·开发语言·数据结构·c++·笔记·学习·算法
☆璇6 小时前
【C++】C/C++内存管理
c语言·开发语言·c++