Python 3.7网络爬虫快速入门
上QQ阅读APP看书,第一时间看更新

2.3 使用复合类型

在2.1节中,大家学习了Python的变量以及数据类型,有整数、浮点数、字符串、布尔值等。除了这些基本数据类型,Python中还有一些复合数据类型,有列表、元组、字典以及集合等。本节就来学习这些复合类型。

2.3.1 列表

列表(List)是最常用的Python数据类型,它的数据项(或称为元素)不需要具有相同的类型,可以随时添加和删除其中的数据项或元素。

创建一个列表,只要把逗号分隔的不同数据项使用方括号括起来即可,如下所示。

访问列表的方式很简单:可以通过列表的索引访问列表中的每一个元素。与字符串的索引一样,列表索引从0开始。另外,还可以通过len()函数来获取列表的长度。

【范例程序2-4】创建和访问列表

范例程序2-4的代码

以上代码首先创建了一个列表,然后通过索引访问列表中的元素,并且使用len()函数获取列表元素的个数。把这段代码保存到程序文件2-4.py中,执行该程序,结果如图2.11所示。

图2.11 创建和访问列表

除了对列表的创建和访问操作之外,Python还支持对列表的添加元素、删除元素、修改元素、查找元素以及简单的统计等操作。

1. 为列表添加元素

有三种方式可以为列表添加新的元素,分别为:在末尾添加单个元素,在末尾添加列表,将元素插入到列表中指定的位置。

(1)使用列表的append()方法可以在列表末尾添加一个新的对象(元素)。其语法格式如下所示。

     list.append(object)

在以上代码中,object是任意数据类型的元素,通过该方法可以将object添加到list列表的末尾。

范例程序:使用append()方法在list1末尾添加一个字符串“add”。

输出结果为:

     ['happy', 12, 3.2, 'add']

(2)使用extend()方法可以在列表末尾追加列表(即添加多个元素),语法格式如下:

     list.extend(list1):

其中的参数list1为另一个列表,执行该方法会将list1列表添加到list列表末尾,相当于合并两个列表。

范例程序:使用extend()方法将list3添加到list2中,就是把list3的所有元素合并到list2中。

输出结果为:

这里要注意:在extend()方法中,参数是list3,也就是把list3的所有元素添加到list2的末尾。从输出结果来看,成功地实现了想要的功能。同时,list3的值并没有发生任何改变,这说明extend()方法仅仅是把list3的值复制了一份参与添加操作。

(3)通过列表的insert()方法可以在列表的指定位置添加新的元素,其语法格式如下所示。

     list.insert(index, object)

在以上代码中,index是对象object需要插入的索引位置,object则是要插入到列表中的对象。执行代码即可将object添加到list列表指定的index位置上。注意:列表的索引值从0开始而不是从1开始。

范例程序:在list2中,在7和‘a’中间插入一个数字6。

输出结果为:

     [10, 9, 8, 7, 6, 'a', 'b', 'c', 'd']
2. 删除列表中的元素

从列表中删除元素,有pop()方法、del语句以及remove()方法。

(1)使用列表的pop()方法删除列表中的一个元素,并且返回该元素的值。不填写参数时,默认为删除列表中的最后一个元素。pop()方法带返回值,语法格式如下所示。

     list.pop(index)

在以上代码中,index是一个可选参数,指定需要删除的元素项。如果不带该参数,就默认删除列表中的最后一个元素。

范例程序:将list2中最后一个元素删除掉,返回这个被删除的元素值。

输出结果为:

例如,将list2中索引为5的元素删除。

输出结果为:

     [10, 9, 8, 7, 'a', 'c', 'd']

(2)使用del语句也可以删除列表中的一个元素。del不带返回值,语法格式如下所示。

     del list[index]

其中,参数index为要删除的列表元素对应的索引值。

del的用法和pop()方法相似,不同点在于:pop()方法有返回值,del语句没有返回值。

(3)使用remove()方法会删除列表中某个值的第一个匹配元素。该方法没有返回值,但是会删除列表中某个值的第一个匹配元素。其语法格式如下所示。

     list.remove(value)

其中,参数value为要删除的值,只有列表中匹配的第一个值才会被删除。

范例程序:将list2中两个‘c’中靠前面的那一个删除,第二个会被保留下来。

     list2 = [10, 9, 8, 7, 'a', 'b', 'c', 'd','c']
     list2.remove('c')
     print(list2)

输出结果:

     [10, 9, 8, 7, 'a', 'b', 'd', 'c']

除了为列表添加元素、删除列表中的元素这些最基本的操作外,还有修改列表中的元素值、查找列表中的元素等,请参考表2.6。

表2.6 列表常用操作汇总表

表2.6列出了对列表进行操作的常用方法,其使用方式大同小异。限于篇幅,这里不再赘述。有兴趣的读者可以根据表格中的介绍自行实践学习。

2.3.2 元组

元组(Tuple)也是一种特殊的复合类型列表,通过一对括号()来表示。元组与列表最大的不同是:元组一旦被定义之后就不能改变了,同时也不能执行添加、删除、修改这样的操作,只能获取元组中的元素。

元组是常量类型的列表,与列表的最大区别在于:对列表的那些更改自身元素的操作和方法在元组类型中都不支持,元组一旦在内存中创建,就不可被更改,除了这类方法之外,元组的其他方法和列表的方法一样。

由于元组具有不可变的属性,因此代码更安全。如果能用元组代替列表,就尽量用元组。

【范例程序2-5】创建和访问元组

范例程序2-5的代码

以上代码首先创建一个元组,然后通过索引访问元组的元素,并且使用len()方法获取元组元素的个数。把该段代码保存到程序文件2-5.py中,执行该程序,将会出现与图2.11类似的执行结果。唯一的不同之处是程序2-4.py中输出的列表用方括号包括其中的元素,而本例中输出的元组以圆括号包括其中的元素。

2.3.3 字典

字典(Dict)是Python中关联型的容器类型。字典的创建使用花括号{}的形式,每一个元素都是一对,并且每对包括key(键)和value(值)两部分,即“键-值对”(key-value pair),中间以冒号隔开。

在使用字典时,对于key需要注意的是:

(1)key的类型只能是常量类型。key必须为常量类型(数值,不能是含有可变类型元素的元组、字符串等),不能用可变类型作为key。例如,列表不可作为字典的key,因为key必须保持不变,其作用是作为字典的索引值,Python是根据这个不可变的值去存放数据的。

(2)key值不能重复。key值在一个字典中是唯一的,不存在重复的key值。这里所说的key值是key本身的值,而不是“键-值对”中的value(值)。

与列表相比,字典的优点是查找和插入的速度极快,不会随着key的增加而变慢。但缺点也很明显,就是需要占用大量的内存。所以,字典是用空间来换取时间的一种方法。字典可以用在需要高速查找的很多应用中,在Python代码中几乎无处不在,正确使用字典类型非常重要。

字典的创建方法如下所示。

     dict={key:value,key1:value1 ……}

以上代码中的key、key1就是键(用于索引),value、value1就是可用键来查找的值。

【范例程序2-6】创建和使用字典

范例程序2-6的代码

以上代码首先创建一个字典,然后通过key访问字典中key所对应的value(值)。把该段代码保存到程序文件2-6.py中,执行该程序,运行结果如图2.12所示。

图2.12 字典的创建与使用

2.3.4 集合

集合类型(Set)是Python特有的一种复合类型。集合类型可以用一句话来概括其作用:无序并唯一地存放容器元素的类型。集合类型中可以存放各种类型的对象,存放其中的对象无序,但是不能重复存放相同的对象。集合和字典有类似之处,是一组键的集合,但集合没有对应存储的值。由于键的唯一性,因此在集合中没有重复的键。

集合的创建方法如下所示。

提示

传入set()的参数[1, 2, 3]是一个列表,而显示的{1, 2, 3}只是告诉用户这个集合内部有1、2、3这三个元素,显示的顺序也不表示集合是有序的。

集合可以看成数学中集合的概念:无序和无重复的一组元素。因此,两个集合可以执行数学上集合的交集、并集等运算。而Python提供的集合的方法也主要是并、交、差、补、判断子集等。

(1)并就是将两个集合的元素合并在一起,可以用union()方法或者|运算符进行这种运算。

(2)交就是求两个集合共有的元素,可以用intersection()方法或者&运算符来进行这种运算。

(3)差就是求一个集合比另一个集合多或者少的元素,可以用difference()方法或者减法运算符来执行这种运算。

(4)补就是求两个集合中不为交集的元素,可以用symmetric_difference()方法或者^运算符来执行这种运算。

(5)判断子集,就是判断一个集合是否为另一个集合的子集,可以用Issubset()方法或者<=运算符来执行这种运算。

【范例程序2-7】集合的操作

范例程序2-7的代码

以上代码创建了两个集合,然后将集合分别输出,之后对两个集合进行差、并、补等运算,并输出结果。把该段代码保持到程序文件2-7.py中,执行该程序,结果如图2.13所示。

图2.13 集合的创建与使用

此外,对于集合,还可以调用add(key)方法与remove(key)方法添加与删除集合中的元素。这里不再赘述。