Python列表的创建与删除的操作指南

2025-12-07 20:50

本文主要是介绍Python列表的创建与删除的操作指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍...

一、前言

列表(list)是 python 中最常用、最灵活的内置数据结构之一。
它支持动态扩容、混合类型、嵌套js结构,几乎无处不在。

但你真的会“创建”和“删除”列表吗?

  • 空列表有几种写法?哪种更快?
  • delpop()remove() 有什么区别?
  • 删除元素后,内存真的释放了吗?
  • 如何安全地清空一个被多个变量引用的列表?

本文将带你: ✅ 掌握 6 种列表创建方式及适用场景
✅ 深入理解 4 种删除操作的原理与差异
✅ 避开“删除后仍存在”的引用陷阱
✅ 学会高效清空与释放内存
✅ 写出安全、清晰、高性能的列表操作代码

二、列表的创建方式

1. 字面量语法(最常用)

lst = [1, 2, 3]
empty = []

✅ 优点:简洁、高效、可读性强
✅ 推荐:90% 场景首选

2. 使用list()构造器

lst = list([1, 2, 3])   # 从可迭代对象创建
empty = list()          # 空列表
chars = list("hello")   # ['h', 'e', 'l', 'l', 'o']

✅ 适用:将字符串、元组、集合等转为列表

注意:list() 比 [] 略慢(需函数调用开销)

3. 列表推导式(List Comprehension)

squares = [x**2 for x in range(5)]  # [0, 1, 4, 9, 16]
evens = [x for x in range(10) if x % 2 == 0]

✅ 优点:简洁、高效、Pythonic
✅ 推荐:替代 for + append() 的首选

4. 重复操作符*

zeros = [0] * 5          # [0, 0, 0, 0, 0]
rows = [[0] * 3] * 2     # ❌ 危险!见下文陷阱

重大陷阱:[[0]*3]*2 会创建多个引用指向同一个子列表

matrix = [[0] * 3] * 2
matrix[0][0] = 1
print(matrix)  # [[1, 0, 0], [1, 0, 0]] ← 意外修改了两行!

✅ 正确写法(用列表推导式):

matrix = [[0] * 3 for _ in range(2)]

5.copy()与deepcopy()(创建副本)

import copy

original = [1, [2, 3]]
shallow = original.copy()        # 浅拷贝
deep = copy.deepcopy(original)   # 深拷贝

✅ 用途:避免修改原列表(尤其含嵌套可变对象时)

6. 动态创建(空列表 +append/extend)

lst = []
for i in range(5):
    lst.append(i)

✅ 适用:无法预知元素数量的场景
⚠️ 性能:比列表推导式慢,尽量避免

三、列表的删除操作详解

方法作用返回值是否就地修改
del lst[index]按索引删除✅ 是
lst.pop(index)按索引删除并返回值被删元素✅ 是
lst.remove(value)按值删除(首次匹配)✅ 是
lst.clear()清空所有元素✅ 是

1.del:按索引或切片删除

lst = [1, 2, 3, 4]

del lst[1]      # 删除索引1 → [1, 3, 4]
del lst[1:3]    # 删除切片 → [1]
del lst         # 删除整个变量(不再指向列表)

del lst 不是清空列表,而是解除变量名与对象的绑定

2.pop():删除并获取元素

lst = [10, 20, 30]
last = lst.pop()      # 返回 30,lst → [10, 20]
first = lst.pop(0)    # 返回 10,lst → [20]

✅ 典型应用:实现栈(pop())或队列(pop(0),但效率低)

pop(0) 时间复杂度 O(n),大数据量建议用 collections.deque

3.remove():按值删除(只删第一个)

lst = [1, 2, 2, 3]
lst.remove(2)  # 删除第一个2 → [1, 2, 3]
lst.remove(99) # ValueError: list.remove(x): x not in list

✅ 建议:先判断 if value in lst 再删除,或捕获异常

4.clear():清空列表(保留对象)

lst = [1, 2, 3]
lst.clear()  # lst → []

✅ 优势:所有引用该列表的变量都会看到空列表

a = [1, 2, 3]
b = a
a.clear()
print(b)  # [] ← 因为 a 和 b 指向同一个对象

四、常见陷阱与避坑指南

陷阱 1:在遍历中直接删除元素(导致跳过)

# 错误!
nums = [1, 2, 3, 4, 5]
for x in nums:
    if x % 2 == 0:
        numshttp://www.chinasem.cn.remove(x)  # 修改正在遍历的列表 → 跳过元素!

# 结果:nums = [1, 3, 4, 5] ← 4 没被删!

✅ 正确做法:

  • 遍历副本:for x in nums[:]:
  • 或反向遍历:f编程or i in range(len(nums)-1, -1, -1):
  • 或使用列表推导式:nums = [x for x in nums if x % 2 != 0]

陷阱 2:误以为del lst释放了内存

a = [1, 2, 3]
b = a
del a      # 只删除 a 这个名字,列表对象仍被 b 引用
print(b)   # [1, 2, 3]

✅ 真正释放内存:当所有引用都被删除,Python 垃圾回收器才会回收对象。

陷阱 3:混淆lst = []与lst.clear()

def reset_list_bad(lst):
    lst = []  # 只改变局部变量,不影响外部!

def reset_list_good(lst):
    lst.clear()  # 就地清空,外部可见

✅ 如果需要让函数修改传入的列表,必须用 clear() 或切片赋值 lst[:] = []

五、性能对比(小贴士)

操作时间复杂度说明
append()O(1)(摊还)高效
pop()(末尾)O(1)高效
pop(0) / insert(0, x)O(n)低效,用 deque 替代
remove(x)O(n)需线性查找
x in lstO(n)大列表建议用 set
clear()O(n)需释放每个元素的引用

六、最佳实践总结

场景推荐做法
创建空列表lst = []
从可迭代对象创建list(iterable)
条件过滤生成列表推导式 [x for x in ... if ...]
安全删除遍历中元素遍历副本或用推导式
清空列表android(多引用共享)lst.clear()
获取并删除末尾元素lst.pop()
按值删除(确保存在)先 if x in lst 再 remove

核心原则
“就地修改” vs “创建新对象”要分清,
引用关系决定你的删除是否生效。

七、结语

以上就是Python列表的创建与删除的操作指南的详细内容,更多关于Python列表创建与删除的资料请关注China编程(www.chinasem.cn)其它相关文章!

这篇关于Python列表的创建与删除的操作指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156381

相关文章

在C#中分离饼图的某个区域的操作指南

《在C#中分离饼图的某个区域的操作指南》在处理Excel饼图时,我们可能需要将饼图的各个部分分离出来,以使它们更加醒目,Spire.XLS提供了Series.DataFormat.Percent属性,... 目录引言如何设置饼图各分片之间分离宽度的代码示例:从整个饼图中分离单个分片的代码示例:引言在处理

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文