当前位置: 首页 > 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.xdnf.cn/news/1350505.html

相关文章:

  • 构建现代高并发服务器:从内核机制到架构实践
  • Win11 下卸载 Oracle11g
  • 青少年机器人技术(五级)等级考试试卷(2020年9月)
  • 基于Python对酷狗音乐排行榜数据分析可视化【源码+LW+部署】
  • 【Win】Motrix+Aria2浏览器下载加速
  • 深入解析Spring Boot自动配置原理:简化开发的魔法引擎
  • 在 Spring Boot 中配置和使用多个数据源
  • C++之list类的代码及其逻辑详解 (中)
  • 构建真正自动化知识工作的AI代理
  • 随着威胁的加剧,地方政府难以保卫关键基础设施
  • Java项目:基于SpringBoot和Vue的图书个性化推荐系统(源码+数据库+文档)
  • 以太坊智能合约地址派生方式:EOA、CREATE 和 CREATE2
  • C语言宏用法
  • Python 地理空间分析:核心库与学习路线图
  • ESP32应用——UDP组播/广播(ESP-IDF框架)
  • HarmonyOS 递归实战:文件夹文件统计案例解析
  • 配置npm国内源(包含主流npm镜像源地址)
  • 北极圈边缘生态研究:从数据采集到分析的全流程解析
  • 在github上通过dmca数字版权申诉侵权并删除侵权仓库
  • 【84页PPT】智慧方案某著名企业某集团协同OA整体解决方案(附下载方式)
  • IntelliJ IDEA 集成 ApiFox 操作与注解规范指南
  • C++ + Boost + MySQL 项目完整教程
  • mysql的mvcc
  • 如何用Redis作为消息队列
  • Science Robotics 通过人机交互强化学习进行精确而灵巧的机器人操作
  • Flink框架:算子链的介绍
  • iview admin 使用mock.js模拟数据
  • 01_Python的in运算符判断列表等是否包含特定元素
  • C语言初学者笔记【动态内存管理】
  • 深入探讨集成学习:Bagging与Boosting的核心原理与实践