Python与网络爬虫——列表与元组
目录导读1.1 列表的概述1.2 列表的遍历1.2.1 使用while循环遍历列表1.2.2 使用for循环遍历列表1.3 列表的基本操作1.3.1 增加元素1.3.2 查找元素与计数1.3.3 删除元素1.3.4 分片赋值1.3.5 列表排序二、元组2.1 元组的基本操作2.1.1 合并元组2.1.2 元组的遍历2.2 元组的内置函数三、案例实战导读在计算机应用领域中常常会遇到需要处理大量数据的问题其特点是数据量很大数据之间存在一定的内在关系。例如一个班有100个学生如果用字符串变量存储学生的名字那么需要100个变量可见用字符串变量来处理这样的数据将十分不方便甚至不能处理本文将介绍如何使用列表和元组数据结构解决这一类问题。一、列表1.1 列表的概述列表list是包含0个或多个元素的有序序列属于序列类型。列表的长度和内容都是可变的可自由对列表中的元素进行增加、删除或替换。列表没有长度限制元素类型可以不同可以同时包含整数、实数、字符串等基本类型也可以是列表、元组、字典、集合以及其他自定义类型的对象使用非常灵活。创建列表的方式很简单只需将逗号分隔的不同元素使用方括号括起来即可。例如animal [elephant, monkey, snake, tiger] animal [elephant, monkey, snake, tiger]与字符串的索引一样列表索引也是从0开始的。我们可以通过下标索引的方式来访问列表中的值animal[0] elephant注意与整数和字符串不同列表要处理一组数据因此列表必须通过显式的数据赋值才能生成简单将一个列表赋值给另一个列表不会生成新的列表对象只是产生对原有列表的一个新的引用。例列表的赋值与引用stu_1 [001, Wangwu, 98] #使用数据赋值创建列表stu_1 stu_2 stu_1 #stu_2是stu_1所对应数据的引用stu_2并不包含真实数据 print(stu_1, stu_2) #输出stu_1和stu_2 stu_1[0] 002 #修改元素stu_1[0]的值为002 print(stu_1, stu_2) #输出stu_1和stu_2程序运行结果如下也可以使用list()函数将字符串、range对象、元组等对象转换为列表。其语法格式为list(obj)其中obj为需要转换的对象。list(hello world) #将字符串转换为列表 [h, e, l, l, o, , w, o, r, l, d] list(range(1,10,2)) #将range对象转换为列表 [1, 3, 5, 7, 9]1.2 列表的遍历1.2.1 使用while循环遍历列表使用while循环遍历列表首先需要获取列表的长度将获取的列表长度作为while循环的判断条件。例使用while循环遍历列表animal [elephant, monkey, snake, tiger] #创建列表animal length len(animal) #获取列表的长度赋给length i 0 #循环遍历i初值为0 while i length: #当i小于length时循环 print(animal[i]) #输出列表元素 i 1 #循环变量加11.2.2 使用for循环遍历列表使用for循环遍历列表的方式非常简单只需要将要遍历的列表作为for循环表达式中的序列即可。animal [elephant, monkey, snake, tiger] #创建列表animal for name in animal: #将要遍历的列表作为for循环表达式中的序列 print(name) #输出name1.3 列表的基本操作1.3.1 增加元素append()方法使用append()方法可在列表末尾添加新的元素。list.append(obj)list表示列表obj表示添加到列表末尾的对象add_list [0,1,2,3] #创建列表add_list并赋值 add_list.append(4) #使用append()方法给add_list末尾添加元素4 add_list #打印add_list [0, 1, 2, 3, 4]extend()方法使用extend()方法可在列表末尾一次性追加另一个序列中的多个值用新列表扩展原来的列表。例比较extend()方法与append()方法添加列表元素的不同。list_1 [1,2,3] #创建列表list_1并赋值 list_2 [4,5,6] #创建列表list_2并赋值 list_3 [7,8,9] #创建列表list_3并赋值 list_1.append(list_2) #将list_2看作一个对象整体打包添加到list_1对象中 print(list_1) #输出list_1 list_2.extend(list_3) #将list_3看作一个序列将这个序列和list_2序列合并 print(list_2) #输出list_2insert()方法使用insert()方法可将指定对象插入到列表的指定位置。list表示列表index表示对象需要插入的索引位置obj表示要插入列表中的对象number [1,2,4,5] #创建列表number并赋值 number.insert(2,3) #使用insert()方法将元素3添加到列表索引为2的位置中 number #打印number [1, 2, 3, 4, 5]1.3.2 查找元素与计数index()方法用于返回指定元素在列表中首次出现的位置如果该元素不在列表中则抛出异常。例在列表中查找元素如果找到输出该元素在列表中的索引位置否则输出未找到。animal [elephant, monkey, snake, tiger] #创建列表animal x input(请输入要查找的动物名称:) #输入要查找的元素 if x in animal: #查找是否存在 a animal.index(x) #返回索引 print(元素{0}在列表中的索引为:{1}.format(x,a)) #输出索引号 else: print(列表中不存在该元素) #输出未找到信息count()方法统计指定元素在列表中出现的次数。x [1,2,1,2,1,2] #创建列表 x.count(1) #使用count()方法统计1在变量x中的出现次数 31.3.3 删除元素del命令可根据索引删除列表中的元素还可以使用分片的方式删除列表中的元素。number [1,2,3,4,5] #创建列表number并赋值 del number[2] #使用del命令删除number中索引为2的元素 number #打印number [1, 2, 4, 5] number [1,2,3,4,5] #创建列表number并赋值 del number[1:3] #使用del命令删除索引从1到3不包括3的元素 number #打印number [1, 4, 5]pop()方法用于移除列表中的一个元素默认为最后一个元素并且返回该元素的值。list.pop([obj])list表示列表obj为可选参数表示移除列表元素的索引值默认为-1删除最后一个列表值number [1,2,3,4,5] #创建列表number并赋值 number.pop() #使用pop()方法删除number中的元素 5 number #打印number [1, 2, 3, 4] number.pop(0) #使用pop()方法删除number中索引为0的元素 1 number #打印number [2, 3, 4]remove()方法用于移除列表中某个值的第一个匹配项。例删除列表中所有的指定元素。x [123,abc,xyz,abc,python] #创建列表x并赋值 while abc in x: #循环 x.remove(abc) #使用remove()方法删除x中值为abc的元素 print(x) #输出x1.3.4 分片赋值分片赋值就是以分片的形式给序列赋值可以一次为多个元素赋值。分片赋值还可以在不替换任何原有元素的情况下插入新的元素。分片赋值也可以用来删除元素。x [1, 2, 3, 4] #创建列表并赋值 x #打印列表x [1, 2, 3, 4] x[2:] [5, 6, 7]#替换变量x索引从2开始到最后的元素 x #打印变量x [1, 2, 5, 6, 7] x [1,7] #创建列表并赋值 x[1:1(不包含] [2,3,4,5,6] #在变量x中索引为1的位置插入列表[2,3,4,5,6] x #打印变量x [1, 2, 3, 4, 5, 6, 7] x [1, 2, 3, 4, 5, 6, 7] #创建列表并赋值 x[1:6] [] #用空列表将x中索引1到索引6之间的元素替换 x #打印变量x [1, 7]1.3.5 列表排序reverse()方法用于将列表中的元素反向存放。x [1,2,3,4] #创建列表并赋值 x.reverse() #使用reverse()方法将变量x中的元素反向存放 x #打印变量x [4, 3, 2, 1]sort()方法用于对原列表进行排序默认为升序排序排序后的新列表会覆盖原列表。list.sort([keyNone][,reverseFalse])后续程序简单,不再做演示list表示列表key为可选参数如果指定了该参数会使用该参数的方法进行排序reverse为可选参数表示是否反向排序默认为Falsesorted()函数与sort()方法不同内置函数sorted()返回新列表并不对原列表进行任何修改。sorted(iterable[,keyNone][,reverseFalse])iterable表示可迭代对象在这里就是列表名参数key和reverse的用法与sort()方法中的相同二、元组2.1元组的基本操作元组tuple与列表类似不同之处在于不能修改元组的元素元组使用圆括号包含元素而列表使用方括号包含元素。创建元组只需要在圆括号中添加元素并使用逗号分隔元素即可也可省略圆括号直接使用逗号分隔元素。x(a, b, 1, 2,3) #创建元组x x #输出x (a, b, 1, 2,3) ya,b,c,d #创建元组y时省略了圆括号 y #输出y (a,b,c,d)注意事项1如果要定义一个空元组可以用没有包含内容的圆括号来表示。2Python在定义只有1个元素的元组时在元素后面必须加一个逗号“”。2.1.1 合并元组元组中的元素值是不允许修改的但我们可以对元组进行连接组合。x (1, 2, 3) #创建元组x y (a, b) #创建元组y z x y #将元组x和y进行连接组合后赋给z z #输出z (1, 2, 3, a, b)2.1.2 元组的遍历略与列表相同......2.2 元组的内置函数Python提供的元组内置函数有len()、max()、min()和tuple()。tuple()函数的功能是以一个序列为参数并把它转换为元组如果参数本身是元组则原样返回该参数。tuple([1,2,3]) #将列表转换为元组 (1, 2, 3) tuple(abc) #将字符串转换为元组 (a, b, c) tuple((1,2,3)) #参数为元组 (1, 2, 3)三、案例实战例编写一个简易计算器要求根据输入的数字和四则运算符号计算运算结果并输出。operator_list [,-,*,/] #创建列表并赋值四则运算符 number_1 float(input(请输入第一个操作数)) #获取第一个操作数 operator input(请输入运算符) #获取运算符 number_2 float(input(请输入第二个操作数)) #获取第二个操作数 #判断用户输入的运算符并进行计算将结果赋值给变量result if operator not in operator_list: #输入的运算符不是四则运算符 print(输入的运算符有误请输入四则运算符) #输出提示语 else: #输入的运算符属于四则运算符 if operator : #运算符为“” result number_1 number_2 #两数相加的值赋给变量result elif operator -: #运算符为“-” result number_1 - number_2 #两数相减的值赋给变量result elif operator *: #运算符为“*” result number_1 * number_2 #两数相乘的值赋给变量result elif operator /: #运算符为“/” result number_1 / number_2 #两数相除的值赋给变量result print(number_1,operator,number_2,,result) #将两个操作数的运算结果输出例已知两个3行3列的矩阵实现其对应位置的数据相加并返回一个新矩阵。X [[12,7,3],[4,5,6],[7,8,9]] #定义矩阵X Y [[5,8,1],[6,7,3],[4,5,9]] #定义矩阵Y result [[0,0,0],[0,0,0],[0,0,0]] #定义新矩阵 for i in range(len(X)): #循环控制行 for j in range(len(X[0])): #循环控制列 result[i][j] X[i][j] Y[i][j] #计算新矩阵中的元素值 for r in result: #遍历输出新矩阵中的元素 print(r)