惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
博客园 - 三生石上(FineUI控件)
博客园 - 【当耐特】
N
News | PayPal Newsroom
K
Kaspersky official blog
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
B
Blog
Recorded Future
Recorded Future
U
Unit 42
J
Java Code Geeks
Security Latest
Security Latest
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Vulnerabilities – Threatpost
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Scott Helme
Scott Helme
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
T
Threatpost
Last Week in AI
Last Week in AI
Know Your Adversary
Know Your Adversary
Project Zero
Project Zero
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cloudbric
Cloudbric
AWS News Blog
AWS News Blog
NISL@THU
NISL@THU
有赞技术团队
有赞技术团队
博客园 - 叶小钗
N
News and Events Feed by Topic
V
V2EX
T
Troy Hunt's Blog
月光博客
月光博客
博客园 - Franky
P
Proofpoint News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
C
Cisco Blogs
The Cloudflare Blog
T
Tor Project blog
Google Online Security Blog
Google Online Security Blog

博客园 - 箫笛

Tkinter - Button 组件 Tkinter - Label 组件 Tkinter - tk 变量 Tkinter - 事件与绑定 Tkinter - 几何管理器 Tkinter - 核心概念 Tkinter - 快速开始 Tkinter - 介绍 Python 编程 - 条件表达式 Python 编程 - 星号下划线参数释义 shell 编程 - shell 脚本的交互方式 Python insall - macOS 系统安装python的几种方式 Miniconda - Python 环境管理工具 Tkinter - Python GUI 开发 Python 编程 - 下划线命名的区别 Python 编程 - 元类编程 Python 编程 - 多重继承与MRO Python 编程 - 描述符协议 Python 编程 - 类型注解 Python 编程 - 生成器表达式 Python 编程 - 集合 Python 编程 - 装饰器 Python 编程 - 闭包 Python 编程 - 列表推导式 Python 编程 - 函数式编程 Python 编程 - lambda 函数 Python 编程 - 文件操作 Python 编程 - 输入与输出 Python 编程 - 面向对象编程 Python 编程 - 元组(tuple) Python 编程 - 字符串(str) Python 编程 - 字典(dict) Python 编程 - 数据类型和数据结构 Python 编程 - 语句 Python 编程 - 函数 windows - WSL 的安装与使用 shell编程 - dialog 程序使用指南 FE Team - 如何做好前端代码审查 git 提交的撤销和恢复 React15 - redux-saga 如何在saga中实现轮询接口调用? React15 - React CSS Modules BEM命名实践 React15 - React 15 中 componentWillReceiveProps 为什么会多次调用, 同时componentDidUpdate 也会多次调用? React15 - React15类组件多次执行render方法的原因? React15 - React15应用中代码逻辑复用方案 React15 - React状态同步问题解决 React15 - React 15 中 React.pureComponent 的使用场景 React15 - React 15应用在页面渲染时会多次执行类组件的render 函数的原因 React15 - React 15 中能用 componetDidUpdate 代替 componentWillReceiveProps 吗? React15 - React 15 生命周期函数详解 React15 - 如何在React 15中实现自定义的事件订阅与发送(例如组件间通信) React15 - React15应用中的事件订阅和发送机制 React15 - CSS中的BEM规范 React15 - React CSS Modules BEM命名实践 React15 - 写sass 样式文件,嵌套的结构好,还是扁平的结构好? React15 - sass 中 @mixin 和 @extend 的区别是什么? React15 - React 15 应用 如何使用Css moudules 方式进行模块化开发 React15 - React15应用Sass使用指南 React15 - React 15 应用如何进行性能优化?
Python 编程 - 列表(list)
箫笛 · 2026-06-20 · via 博客园 - 箫笛

在 Python 3 中,list(列表)是一种非常基础且常用的可变序列类型,用于存储一系列有序的元素。下面从基本特性、常用操作、性能及注意事项等方面进行介绍。


1. 核心特性

  • 有序:元素保持插入顺序,可以通过索引访问。
  • 可变:列表创建后可以增、删、改元素。
  • 元素类型任意:一个列表中可以包含不同类型的数据(如整数、字符串、甚至其他列表)。
  • 动态长度:没有固定大小限制,可以根据需要自动扩展或收缩。
  • 可迭代:支持 for 循环、列表推导式等迭代操作。

2. 创建列表

# 空列表
empty = []

# 带初始值
numbers = [1, 2, 3]
mixed = [1, "hello", 3.14, [4, 5]]

# 使用 list() 构造函数
chars = list("abc")   # ['a', 'b', 'c']
ranged = list(range(5))  # [0, 1, 2, 3, 4]

# 列表推导式
squares = [x**2 for x in range(5)]   # [0, 1, 4, 9, 16]

3. 常用操作

3.1 访问与修改

lst = [10, 20, 30, 40]
print(lst[0])    # 10
print(lst[-1])   # 40(负索引从末尾开始)

# 修改元素
lst[1] = 25      # [10, 25, 30, 40]

# 切片(返回新列表)
sub = lst[1:3]   # [25, 30]

3.2 添加元素

lst = [1, 2]
lst.append(3)          # [1, 2, 3](末尾追加)
lst.extend([4, 5])     # [1, 2, 3, 4, 5](合并列表)
lst.insert(1, 99)      # [1, 99, 2, 3, 4, 5](指定位置插入)

3.3 删除元素

lst = [10, 20, 30, 20]
lst.remove(20)         # 删除第一个值为20的元素 -> [10, 30, 20]
popped = lst.pop()     # 弹出并返回最后一个元素(pop(0)可弹出第一个)
del lst[0]             # 删除索引0处的元素
lst.clear()            # 清空列表

3.4 查找与计数

lst = [5, 2, 9, 2]
lst.index(2)           # 返回第一个2的索引 -> 1
lst.count(2)           # 2
2 in lst               # True

3.5 排序与反转

lst = [3, 1, 4]
lst.sort()             # 原地升序 -> [1, 3, 4]
lst.sort(reverse=True) # 原地降序 -> [4, 3, 1]
lst.reverse()          # 原地反转 -> [1, 3, 4]

# 不修改原列表,返回新列表
sorted(lst)            # 升序新列表
list(reversed(lst))    # 反转后的新列表

3.6 复制

a = [1, 2, [3, 4]]
b = a.copy()           # 浅拷贝(内层列表仍是引用)
import copy
c = copy.deepcopy(a)   # 深拷贝(完全独立)

4. 常见操作的时间复杂度

操作 平均情况 说明
lst[i] (索引) O(1)
lst.append(x) O(1) 偶尔需要扩容,但均摊为O(1)
lst.pop() O(1) 弹出末尾元素
lst.pop(i) / insert(i, x) O(n) 需要移动后续元素
del lst[i] O(n)
x in lst O(n) 线性搜索
lst.sort() O(n log n) 使用 Timsort 算法
切片 lst[a:b] O(k) k = b-a,产生新列表

5. 列表推导式(List Comprehension)

一种简洁、高效的生成列表的方式:

# 普通写法
squares = []
for x in range(10):
    squares.append(x**2)

# 列表推导式
squares = [x**2 for x in range(10)]

# 带条件
evens = [x for x in range(20) if x % 2 == 0]

# 嵌套循环
pairs = [(x, y) for x in [1,2] for y in [3,4]]

6. 使用注意事项

  • 浅拷贝陷阱:当列表包含可变对象(如子列表)时,copy()list() 只复制引用,修改内层对象会影响原列表。
  • 作为函数默认参数:避免使用可变默认参数(如 def f(lst=[])),多次调用会共享同一个列表对象。
  • 作为栈和队列append()pop() 可实现栈(LIFO)。若需要高效队列(FIFO),请使用 collections.deque,因为列表的 pop(0) 是 O(n)。
  • 内存占用:列表存储的是对象的引用,每个引用约8字节(64位系统),实际元素占用独立内存。存储大量数值时,可使用 array.arraynumpy.ndarray 节省空间。

7. 与其他类型的对比

类型 可变性 元素类型限制 适用场景
list 可变 任意 通用有序集合
tuple 不可变 任意 不可变的数据集合,字典键
array.array 可变 单一数值类型 内存紧凑,数值运算轻量
numpy.ndarray 可变 单一数值类型 科学计算,向量化操作

8. 总结

  • list 是 Python 中最灵活、最常用的序列容器,适合存储有序且需要频繁修改的任意数据。
  • 掌握索引、切片、追加、插入、删除、排序等核心操作,以及列表推导式,可以高效处理绝大多数数据集合需求。
  • 注意浅拷贝、可变默认参数等常见陷阱,根据场景选择合适的数据结构(如队列用 deque,数值数组用 arraynumpy)。