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 copy

my_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列表!

### Python 自动化工作习题及解答 #### 一、字符串操作练习 对于给定的字符串 `str1 = "I love python"`,可以通过索引访问特定位置上的字符以及通过切片方法复制整个字符串[^4]。 ```python str1 = "I love python" # 找出第6个字符 print(str1[5]) # 复制一份字符串,保存为 str_two str2 = str1[:] print(str2) ``` 上述代码展示了如何获取指定索引处的单个字符(注意:索引是从0开始计数),同时也演示了怎样利用完整的切片语法创建原字符串的一个副本。运行这段程序会得到如下输出: ``` e I love python Process finished with exit code 0 ``` #### 二、列表处理实践 当涉及到表格数据展示时,可以采用循环遍历的方式配合`rjust()`函数实现右对齐效果[^5]。这里给出一段简化版的例子用于说明这一过程: ```python tableData = [['apples', 'oranges', 'cherries'], ['Alice', 'Bob', 'Carol']] len_list = [len(max(column, key=len)) for column in tableData] for row in range(len(tableData[0])): line = '' for col in range(len(tableData)): line += tableData[col][row].rjust(len_list[col]) + ' ' print(line.strip()) ``` 此段脚本首先计算每一列中最长字符串长度作为后续调整依据;接着逐行读取各列元素,并调用`.rjust()`确保它们按照预设宽度显示出来,最终形成整齐排列的结果。 #### 三、自动化测试案例分析 针对哪些类型的项目最适合开展自动化测试的问题,在考虑成本效益的前提下,那些具有稳定需求规格、频繁迭代周期短且存在大量重复性任务的应用场景往往成为首选对象[^1]。这类项目的特性使得投入资源构建一套可靠的自动测试框架能够显著提高开发效率并减少人为错误的发生几率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值