v>
软件测试
广州博才科技开发有限公司
迅捷PDF编辑器
3.2 列表
学习目标:
1. 能够说出如何定义一个列表
2. 能够说出列表容器和字符串容器的区别
3. 能够说出如何向列表中添加元素
4. 能够说出如何删除列表中的一个元素
5. 能够说出如何对列表中的元素进行排序
6. 能够说出如何对列表中元素进行查询
7. 能够说出如何判断列表中是否存在某个元素
8. 能够使用切片语法获得列表指定索引区间的元素
9. 能够说出如何使用 while 和 for 循环来遍历列表中的元素
3.2.1 列表语法格式
字符串容器中存放的元素只能是字符序列, 并且字符串容器中的元素不能修改, 如果需要存储的数据并非单一
类型, 并且需要频繁修改, 如何解决?
我们可以使用列表容器类型, 列表中存储的元素可以是多种数据类型, 甚至存储的数据类型都不一样, 并且列表支持
对元素的修改、删除等操作.
列表也是一个序列式容器, 同样支持索引和切片语法.
# 创建空列表
my_list = []
# 创建带有元素的列表
my_list = [10, 20, 30]
# 通过索引来访问列表中元素
print(my_list[0])
# 也可以通过索引来修改元素
my_list[0] = 100
# 通过切片语法获得区间元素
print(my_list[1:])
# 列表可存储不同类型的数据
my_list = ['John', 18, True]
# 列表中也可存储列表
my_list = [[10, 20], [30, 40], [50, 60]]
注意: 列表中支持存储不同类型的数据, 如果有没有特殊需求, 建议存储相同类型数据. 这样可以对数据应用统一
的操作.
3.2.2 列表操作
3.2.2.1 列表遍历
47软件测试
广州博才科技开发有限公司
迅捷PDF print(my_list[i], end=
my_list = [
i =
while
0
i < len(my_list):
1, 2, 3, 4, 5]
' ') 编辑器
i += 1
我们也可以用 for 循环来简化列表的遍历操作.
my_list = [1, 2, 3, 4, 5]
for val in my_list:
print(val, end=' ')
3.2.2.2 列表查找和修改
已知: 列表中包含 5 个元素, 分别为: 10、20、30、40、50. 需要将列表中 40 这个元素替换成 100, 如何实
现?
1. 列表不存在类似字符串 replace 的方法.
2. 查询 40 这个元素在列表中的索引位置.
3. 根据索引位置修改元素为 100.
index 方法可以根据值查找, 查找到返回该值元素所在的位置, 查找失败会报错, 程序终止. 我们可以先使用 count 方
法可以统计值出现的次数, 如果不为0, 再使用 index 方法.
my_list = [10, 20, 30, 40, 50]
# 要修改的值
old_value = 40
48软件测试
广州博才科技开发有限公司
迅捷PDF编辑器
# 更新的新值
new_value = 100
# 判断要修改的值是否存在
if my_list.count(old_value):
# 获得指定值的位置
position = my_list.index(old_value)
# 根据值来修改元素
my_list[position] = new_value
print(my_list)
如果我们只是关心值是否存在, 而并不关心出现多少次, 可以使用 in 或者 not in 运算符.
1. in 可以判断元素是否存在, 存在返回 True, 不存在返回 False.
2. not in 可以判断元素是否不存在, 不存在返回 True, 存在返回 False.
以上代码可修改为:
my_list = [10, 20, 30, 40, 50]
# 要修改的值
old_value = 40
# 更新的新值
new_value = 100
# 判断要修改的值是否存在
if old_value in my_list:
# 获得指定值的位置
position = my_list.index(old_value)
# 根据值来修改元素
my_list[position] = new_value
print(my_list)
3.2.2.3 列表的插入和删除元素
列表是一个容器, 我们可以向容器中添加和删除元素.
插入元素分为:
1. 插入单一元素. 1.1 尾插. 1.2 指定位置插入.
2. 插入一个列表(多个元素).
Python 提供了 append 方法, 用于向列表尾部添加元素, insert 方法用于向列表指定的索引位置插入元素, extend 方
法用于将另外一个列表中的所有元素追加到当前列表的尾部.
删除分为两种:
1. 根据值删除, 使用 remove 方法. 该方法只能删除第一次出现的值.
2. 根据索引删除, 使用 pop 方法, 该方法不传递索引时默认删除最后一个元素, 传递索引则根据索引删除元素.
49软件测试
广州博才科技开发有限公司
迅捷PDF
#
my_list = []
#
创建空列表
插入元素分为两种: 尾部插入 指定位置插入 编辑器
# 向列表中添加元素
my_list.append(10)
my_list.append('Obama')
# 在指定位置插入元素
my_list.insert(1, 20)
# 输出内容
print(my_list)
# 创建新的列表
new_list = [100, 200, 300]
# 合并两个列表
my_list.extend(new_list)
print(my_list)
# 删除分为两种: 根据值删除, 根据位置(索引)删除
my_list = [10, 20, 30, 20]
# 根据索引删除
my_list.pop(2)
print(my_list)
# 根据值删除
my_list.remove(20)
print(my_list)
# 删除所有元素
my_list.clear()
# 显示列表中还剩下多少元素
print(len(my_list))
50软件测试
广州博才科技开发有限公司
迅捷PDF编辑器
3.2.2.4 列表元素排序
排序指的是记录按照要求排列. 排序算法在很多领域得到相当地重视.
列表提供了相关方法来对列表中的元素进行排序. 分别是:
1. 将列表中的元反转.
2. 列表中的元素升序(从小到大)、降序排列(从大到小).
import random
my_list = []
# 产生一个包含10个随机数的列表
i = 0
while i < 10:
random_number = random.randint(1, 100)
my_list.append(random_number)
i += 1
# 打印列表中的元素
print('my_list:', my_list)
# 对列表中的反转
my_list.reverse()
# 打印列表中的元素
print('my_list:', my_list)
# 对列表中的元素排序, 默认升序
my_list.sort()
print('my_list:', my_list)
# 对列表中的元素排序, 降序排列
my_list.sort(reverse=True)
print('my_list:', my_list)
3.2.2.5 列表练习
一个学校, 有3个办公室, 现在有 8 位老师等待工位的分配, 请编写程序, 完成随机的分配.
思路分析如下:
1. 待分配的 8 位老师需要存储, 我们可以用列表来暂时存储 8 位老师.
2. 一个学校中包含了多个办公室, 学校可用列表来表示, 学校中又包含了多个办公室, 每个办公室里可能有多个老
师, 办公室仍然可用列表来表示.
3. 从待分配老师列表中取出数据, 随机产生办公室编号, 将该老师分配到该办公室.
4. 打印各个办公室中的老师列表.
import random
# 定义一个列表用来存储8位老师的名字
teacher_list = []
i = 0
while i < 8:
teacher_name = '老师' + str(i + 1)
teacher_list.append(teacher_name)
i += 1
# 定义学校并包含3个办公室
school = [[], [], []]
# 获取每个老师并随机分配办公室
for teacher in teacher_list:
office_nunmber = random.randint(0, 2)
school[office_nunmber].append(teacher)
# 打印各个办公室的老师列表
51软件测试
广州博才科技开发有限公司
迅捷PDF编辑器
for office in school:
for teacher in office:
print("%s" % teacher, end=' ')
print('
' + '*' * 20)
3.2.3 小结
1. 列表一般使用一对中括号 [ ] 来定义.
2. 列表容器的特点: 可以存储任意类型的数据, 并且元素可以修改.
3. 列表中存储的元素类型可不相同, 但建议存储同样的类型.
4. 列表是序列式容器, 支持下标索引和切片操作.
5. 列表遍历可以使用 while 循环, 也可以使用 for 循环.
6. 列表可通过 in 或 not in 运算符来判断是否存在某个元素.
7. 列表的 append 方法用于向列表尾部添加元素.
8. 列表的 insert 方法用于向列表指定索引位置添加元素.
9. 列表的 extend 方法用于将一个列表中所有元素添加到当前列表的尾部.
10. 列表的 pop 方法默认删除尾部元素, 如果设置索引参数, 可删除该索引位置的元素.
11. 列表的 reverse 方法可以将列表中元素逆序.
12. 列表的 sort 方法可以将列表中的元素升序或者降序排列.
3.2.4 思考
1. 如何使用列表存储以下三个人的信息?
1.1 姓名: 奥巴马 年龄: 50 性别: 男 身份证: 1088 1.2 姓名: 希拉里 年龄: 56 性别: 女 身份证: 2782 1.3 姓名: 特
朗普 年龄: 60 性别: 男 身份证: 3368
2. 假如列表中存储了上述信息 10 亿条, 现在需要根据身份证号从列表中查找该身份证号所对应的信息, 请问最差
情况下, 需要多少次才能找到目标数据?
52软件测试
广州博才科技开发有限公司
迅捷PDF编辑器
3.3 元组
学习目标:
1. 能够说出如何定义一个列表
2. 能够说出元组和列表的区别
3. 能够说出如何使用 while 和 for 循环来遍历元组中的元素
4. 能够说出元组支持哪些操作
3.3.1 元组语法和方法
Python的元组与列表类似, 不同之处在于元组的元素不能修改. 元组使用小括号来定义, 列表使用方括号来定义.
由于元组不支持修改, 所以元组只支持遍历、查找操作.
元组同样属于序列式容器, 支持索引和切片语法.
1. 查询元素: count 、 index
2. 遍历操作: while、for
# 定义元组
my_tuple = (10, 20, 30)
my_tuple = ((10, 20, 30), (100, 200, 300))
# 遍历
for ele in my_tuple:
for val in ele:
print(val)
# 查找
my_tuple = (10, 20, 30)
# 判断元素是否存在
if my_tuple.count(20) > 0:
index = my_tuple.index(20)
print('元素的位置:', index)
if 20 in my_tuple:
index = my_tuple.index(20)
print('元素的位置:', index)
注意: 如果定义的元素中只有一个元素, 需要额外添加一个逗号在元素后.
my_tuple = (10,)
my_tuple = ((10, 20, 30), )
my_tuple = ((10, ), )
3.3.2 小结
1. 元组使用一对小括号来定义, 在定义之后不允许对元素进行修改.
2. 元组中只有一个元素时, 需在最尾部添加一个逗号.
3. 元组是序列式容器, 支持索引、切片操作.
4. 元组比列表更节省空间.
53