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

Python 编程 - 列表(list)

在 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)。
http://www.jsqmd.com/news/1049361/

相关文章:

  • 大语言模型安全测试实战:使用FuzzyAI进行自动化模糊测试与漏洞挖掘
  • 2026南宁奢侈品首饰回收行业白皮书:断链旧款奢饰没人收?卡地亚蒂芙尼老旧瑕疵通通回收 - 讯息早知道
  • 2026深圳黄金回收实测对比逸程亲测六家靠谱商家 - 逸程
  • 2026南京婚纱照实力榜单:按品质与特色分级选购指南 - charlieruizvin
  • Spring AI Alibaba 实战项目-智能聊天助手-4 联网搜索工具实现
  • 2026年苏州本地汽车救援热线揭秘,台风天苏州易积水路段案例分享 - 速递信息
  • 2027澳洲留学中介推荐前十名,QS澳八大集体上升后真实案例看口碑 - 速递信息
  • 2026杭州黄金回收等级测评:S级门店需同时满足11项透明经营与售后保障 - 商业信息快查
  • 2026深圳黄金回收避坑指南逸程实测揭秘行业套路 - 逸程
  • 2026南宁奢侈品首饰回收行业白皮书:婚嫁首饰闲置占地方,本地实体高价变现权威指南 - 讯息早知道
  • 上海夜间货车低频震动噪音隔音改造 | 静华轩隔音窗 | 深夜大车轰鸣、墙体窗体共振、低层震感扰民专项隔音,临街楼栋专属居家降噪 - 维小达科技
  • 实战分布式锁
  • 长途电瓶车托运避坑指南 2026 新手必看防骗攻略 - 快递物流资讯
  • 越华环保集团危废暂存间:环保设备合规体系深度拆解
  • 2026年新疆伊犁旅游花期导游路线与住宿安排攻略指南 - 盛世西域旅行
  • 2026年西安全屋定制推荐TOP3:西安邦迪雅全屋定制工厂荣登榜首 - 速递信息
  • 2026无锡钻石回收榜首TOP|行业翘楚,高溢价透明变现标杆 - 讯息早知道
  • 远程服务器部署 Jupyter Notebook 完全指南
  • 表主速存!2026年芝柏官方售后权威公告|全国60+门店地址、服务热线全新更新 - 亨得利中国服务中心
  • 3个简单步骤彻底清理Windows“此电脑“中的顽固图标
  • 构建实时语音转写系统:TMSpeech技术架构与应用实践
  • 医疗器械经营许可证丢失怎么登报?2026最新办理流程 - 速递信息
  • 2026 年池州市厨卫屋顶防水修缮三家横向测评:吉修匠 99.8 分 - 吉修匠
  • 2026深圳黄金变现别踩坑逸程总结三大防骗技巧 - 逸程
  • 2026年上海梅雨季旧房翻新全攻略:防潮防霉与靠谱机构推荐 - 优家闲谈
  • 2026福州闲置名包变现怎么选?正规实体门店大盘点可闭眼预约 - 讯息早知道
  • 2026在无锡回收首饰不玩虚高引流,线上预估价≈线下成交价,所有收费提前说明 - 讯息早知道
  • 2026沈阳爱马仕包包回收哪家稳妥?铁西万达毓典寄卖行全城上门免费估价 - 速递信息
  • 如何快速掌握Nintendo Switch游戏备份:NxDumpTool终极指南
  • 2026无锡钻石回收TOP榜首|翘楚领衔,高溢价透明变现首选 - 讯息早知道