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

PYTHON让繁琐的工作自动化-列表

本文通过实例代码详细讲解Python列表的基本操作、常用方法及深浅拷贝机制,帮助开发者掌握列表这一核心数据结构。

一、列表基础与基本操作

列表是Python中最常用的数据结构之一,它可以存储任意类型的元素,并且支持动态修改。

my_list = ["陈翔", 1, False]# 访问列表元素
print(my_list[0])  # 输出: 陈翔
print(my_list[1])  # 输出: 1
print(my_list[2])  # 输出: False# 列表切片操作
my_new_list = my_list[0:2]
print(my_new_list)  # 输出: ['陈翔', 1]# 修改列表元素
my_list[0] = "蘑菇头"
print("我的列表:", my_list)  # 输出: 我的列表: ['蘑菇头', 1, False]
print("新的列表:", my_new_list)  # 输出: 新的列表: ['陈翔', 1]# 删除列表元素
del my_new_list[0]
print("新的列表:", my_new_list)  # 输出: 新的列表: [1]# 清空列表
my_list.clear()
print("清空后我的列表:", my_list)  # 输出: 清空后我的列表: []

二、列表遍历与搜索

Python提供了多种方式来遍历和搜索列表中的元素。

# 遍历列表
dog_list = ["小黑", "小黄", "小花"]
for dog_item in dog_list:print(dog_item)# 查找元素索引
print(dog_list.index("小花"))  # 输出: 2# 字符串索引查找(对比)
str = "123"
print(str.index("1"))  # 输出: 0
print(str.index("2"))  # 输出: 1
print(str.index("3"))  # 输出: 2

三、列表动态操作与排序

列表支持动态添加、删除元素,并且可以进行排序操作。

# 动态添加元素
number_list = []
for temp_number in range(10):number_list.append(temp_number)
print("添加后的数字列表:", number_list)  # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# 删除元素
for temp_number in range(5):number_list.remove(temp_number)
print("移出后的数字列表:", number_list)  # 输出: [5, 6, 7, 8, 9]# 列表排序(降序)
number_list.sort(reverse=True)  # 注意:这个方法没有返回值,直接修改原列表
print("排序后的数字列表:", number_list)  # 输出: [9, 8, 7, 6, 5]

四、字符串与列表的不可变性对比

需要注意的是,字符串是不可变对象,而列表是可变对象。

my_test_string = "123"
# 以下操作会导致错误,因为字符串不可变
# my_test_string[1] = 0
# TypeError: 'str' object does not support item assignment

五、深浅拷贝详解

这是本文的重点内容,理解深浅拷贝的区别对于避免程序中的bug至关重要。

1. 浅拷贝(Shallow Copy)

浅拷贝会创建一个新对象,但不会递归复制嵌套的对象,而是共享嵌套对象的引用。

import copymy_copy_list = [1, 2, 3, [3, 4], {"name": "小明"}]
my_copy_list_one = my_copy_list.copy()# 修改第一层元素(不会相互影响)
my_copy_list_one[0] = 9
my_copy_list[2] = 22# 修改嵌套对象(会相互影响!)
my_copy_list[3][0] = 'C'
my_copy_list[4]["name"] = "新名字1"print(f"拷贝列表的值:{my_copy_list_one}。原列表的值:{my_copy_list}")

2. 深拷贝(Deep Copy)

深拷贝会递归复制所有嵌套对象,创建一个完全独立的新对象。

my_copy_list_two = copy.deepcopy(my_copy_list)# 修改任何元素都不会相互影响
my_copy_list_two[0] = 9
my_copy_list[2] = 222
my_copy_list[3][0] = 'D'
my_copy_list[4]["name"] = "新名字2"print(f"深度拷贝列表的值:{my_copy_list_two}。原列表的值:{my_copy_list}")

六、何时使用深浅拷贝?

  • 使用copy.copy()(浅拷贝):当你确定对象内部没有嵌套的可变对象,或者你希望嵌套的可变对象在"副本"和"原始"之间共享时。

  • 使用copy.deepcopy()(深拷贝):当你需要创建一个完全独立的副本,并且希望所有层级的修改都互不干扰时。这是更安全、更常用的选择,尤其是在处理复杂的数据结构(如列表套字典、类实例等)时。

七、总结

Python列表是一个功能强大且灵活的数据结构,掌握其基本操作和深浅拷贝机制对于编写可靠的Python程序至关重要。关键点总结:

  1. 列表支持动态增删改查操作

  2. 字符串是不可变的,而列表是可变的

  3. 浅拷贝共享嵌套对象引用,深拷贝创建完全独立副本

  4. 在处理复杂数据结构时,优先考虑使用深拷贝

希望本文能帮助你更好地理解和使用Python列表!

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

相关文章:

  • 07_模块和包
  • UNet改进(34):ACmix-UNet混合架构的PyTorch
  • 动手学深度学习(pytorch版):第六章节—卷积神经网络(1)从全连接层到卷积
  • 避开MES实施的“坑”:详解需求、开发、上线决胜点
  • 自动化知识工作AI代理的工程与产品实现
  • Node.js 和 Express 面试问题总结
  • Ubuntu通过 systemd 管理 gpt4free,需为其创建 g4f.service 文件,定义服务的启动、停止等操作(未实践)
  • Java基础 8.23
  • 【8位数取中间4位数】2022-10-23
  • LangChain4J-基础(整合Spring、RAG、MCP、向量数据库、提示词、流式输出)
  • QT-常用类
  • 【GPT入门】第57课 详解 LLamaFactory 与 XTuner 实现大模型多卡分布式训练的方案与实践
  • calchash.exe和chckhash.exe计算pe文件hash值的两个实用小工具
  • 【Linux系统】命名管道与共享内存
  • 结构化数据与非结构化数据的区别、特点和应用场景
  • Games 101 第四讲 Transformation Cont(视图变换和投影变换)
  • Java22 stream 新特性 窗口算子:GathererOp 和 GatherSink
  • Flink2.0学习笔记:使用HikariCP 自定义sink实现数据库连接池化
  • 权限管理模块
  • 用 Ansible 优雅部署 Kubernetes 1.33.3(RedHat 10)
  • 第一章:启航篇 —— 新晋工程师的生存与扎根 (1)
  • TensorFlow 深度学习 开发环境搭建
  • 通过Java连接并操作MySQL数据库
  • 多智能体篇:智能体的“语言”——ACL协议与消息队列实现
  • 高斯分布的KL散度计算
  • STM32学习笔记19-FLASH
  • 标准浪涌测试波形对比解析
  • linux内核 - vmalloc 介绍
  • Unity 字符串输出文字一样但Equals 判断为false
  • 图论与最短路学习笔记