当前位置: 首页 > news >正文

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 代码;

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

http://www.dtcms.com/a/303520.html

相关文章:

  • 《中小学音乐教育》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • c++: 尾置返回类型(Trailing Return Type)
  • 深度解析Manus:从多智能体架构到通用AI Agent的技术革命
  • Unity教程(二十五)技能系统 掷剑技能(下)冻结时间实现
  • PostgreSQL 详解
  • java每日精进 7.28【流程设计6.0(泳池和泳道)】
  • V-Ray 7.00.08 for 3ds Max 2021-2026 安装与配置教程(含语言补丁)
  • HTML5 `<figure>` 标签:提升网页语义化与可访问性的利器
  • 【2025/07/28】GitHub 今日热门项目
  • Solidity基础(教程①-简单数字存储)
  • 第二十一章:AI的“视觉压缩引擎”与“想象力温床”
  • AIBOX硬件设计概述
  • 什么是 LoRA 学习笔记
  • 项目执行标准流程是什么样的,如何制定
  • Java 接口入门学习笔记:从概念到简单实践
  • ts学习3
  • Microsoft 365中的Compromised User Detection功能深度解析:智能识别与防护用户账户安全的利器
  • 极速保鲜+ERP数字化,深圳“荔枝出海”驶入外贸订单管理快车道
  • 2023.2.2版IDEA安装教程(ideaIU-2023.2.2.win.exe详细步骤)Windows电脑一键安装指南
  • 二层环路与三层环路:原理、区别与解决方案全解析
  • MacBook IOS操作系统格式化U盘FAT32
  • 铜金矿数据分组优化系统设计与实现
  • 前端基础之《Vue(25)—Vue3简介》
  • Go 原理之 GMP 并发调度模型
  • it is not annotated with @ClientEndpoint“
  • 【学习路线】Android开发2025:从入门到高级架构师
  • 拓扑排序算法
  • LeetCode 85. 最大矩形
  • Nginx 四层(stream)反向代理 + DNS 负载均衡
  • 回滚日志-undo log