Python中有许多的高级变量,这些变量会经常使用在程序中,这一节详细介绍常用的高级变量。
列表与元组是经常会被使用到的高级变量,两者之间有许多相同之处,也有不同之处,接下来介绍列表与元组的一些基本知识。
Python的标准库是用C语言实现的,其中含有许多的序列类型,而列表(list)和元组(tuple)则是两个基础而且相当重要的序列类型。学习过C语言的读者应该知道C语言的数组,而列表和元组在某种程度上可以理解为更加高级而且方便的“数组”。接下来,将以数组来作为类比,介绍列表和元组。
何为容器序列?C语言中的数组,要求放入数组中的变量的数据类型必须是相同的,如果不同则会出现错误。但Python中的变量已经没有数据类型这一说,但是并不代表Python中的序列都可以随意放置不同类型的变量。Python中有的序列依然如C语言中一样,只能存放同一种类型的变量,而这种序列被称为扁平序列,在扁平序列中存放着变量的值。而容器序列则与此相反,即容器序列可以存放不同类型的数据,在容器序列中存放着变量的引用。而列表和元组则都为容器序列。示例代码如下。
列表为可变序列(Mutable Sequence),而元组为不可变序列(Sequence)。从字面可以较好地理解,可变序列是可以进行改变的,而不可变序列是无法改变的,而是否改变则是指内存中所存储的内容(value)。例如,列表可以对其中的元素进行增加、删除和修改等操作,而元组则不能直接进行这些操作。示例代码如下。
其中,remove()为列表的删除元素的一种方法,后面会详细介绍。
表3-1给出了列表与元组的异同对比结果。
由上面的简单介绍可以知道,列表为容器和可变序列,这就意味着列表可以进行相当自由和便利的操作。接下来将详细介绍有关列表的使用方法。
(1)列表的创建。
使用列表的第一步即为创建列表,因为列表为容器序列,可以包含多种不同的变量,甚至可以包含列表和元组等序列。具体代码如下。
可以看到,在list1的列表中包含了整数、小数、字符、字符串、列表和元组,由此可见列表的强大。当然,存储的类型不止如此,也可以创建一个空的列表。
需要注意的是,列表是用“[]”来创建的,与后面要讲到的元组采用“()”来创建有所区别。
(2)往列表中增添元素。
要向列表中增添元素,有多种方法实现。接下来将会介绍几种方法,并且介绍其具体的功能。
向列表添加元素最常用的方法是append()。append()的作用是向已创建的列表末尾增加元素,使用方法如下。
下面给出示例代码。
需要注意的是,append()方法只能在列表的末尾添加一个元素,不能添加多个。
如果希望同时可以增加多个元素,则需要使用extend()。与append()不同,extend()并不是直接添加元素,而是在末尾添加一个列表,可以把extend()理解为拼接一个新的列表到旧列表上,使用方法如下。
下面给出示例代码。
此外,还有一种方法也能向列表中增加元素,这种方法是insert()。与append()和extend()不同的是,insert()可以选择列表中的任意位置插入新的元素,使用方法如下。
下面给出示例代码。
从上面可以看到“1”和“11”已经添加到相应的位置上。
(3)查询列表中元素的索引位置。
在列表中查询元素的方法是index()。index()可以查询元素在列表中的索引值,使用方法如下。
下面给出示例代码。
需要注意的是,index()返回的是第一次出现元素的索引值,所以会出现以下这种情况。
如果想要对上面的情况做出一些优化,可以使用Python的index()方法。可能这里读者会有些疑惑,这不是和上面的index()一样吗?其实是不一样的,上面的index()是list列表下的一种方法,即list.index(),而这里说的index()不是list下的方法。与上面不同,此种方法除了要查找元素,还包括了查找的范围,使用方法如下。
下面给出示例代码。
(4)查询列表中的元素。
和数组类似,只要知道元素的索引值,便可以查询到相应位置的元素。示例代码如下。
(5)删除列表中的元素。
在列表中删除元素的方法也有多种,接下来会逐一介绍。
①remove()方法,使用方法如下。
下面给出示例代码。
可以看到的是remove()方法与index()相似,也是对第一个找到的元素进行处理。
②pop()方法,使用方法如下。
下面给出示例代码。
③del和clear()。但是这里需要注意的是,del并不是一个列表的方法,而是语句。del和clear()的作用类似,del是直接删除列表,而clear()则是清空列表,clear()的使用方法如下。
下面给出示例代码。
del还有一点需要注意,del并不是清除数据,而是删除引用数据的变量。即删除变量后,数据依然不变。可以通过多次赋值,然后用del删掉中间的变量来证明这一点,有兴趣的读者可以自行证明。
(6)列表的截取。
列表的截取,又可以叫作列表的分片。示例代码如下。
除此之外,列表的分片还有许多实用的方法,示例代码如下。
在上面的代码中“0”代表起点,“7”代表终点,“2”代表步长。这里,步长是可以为负数的,示例代码如下。
也可以利用这种办法让列表顺序颠倒,这里不再赘述,请读者们自行思考。
(7)列表的排序。
列表中的sort()方法可以让列表中的元素按字典顺序排列,使用方法如下。
这里只介绍sort()的常用用法,示例代码如下。
此外,还有一种方法也可以进行排序,即sorted()。与sort()不同的是,sorted()不会影响原本的列表,而是返回一个排序后的列表,可以把这个列表存进一个新列表中。这里只介绍sorted()的基本用法,示例代码如下。
元组和列表极其相似,唯一的区别就是元组的不可变性。接下来将介绍元组及其相关操作。因为大多数操作与列表相似,这里只列出与列表不同的操作部分。
(1)元组的创建。
与列表相似,可以包含多种不同类型的元素。这里需要注意的是元组的创建是用“()”,也可以不使用“()”而直接使用“,”创建元组。示例代码如下。
(2)元组中元素的增添与改变。
虽然元组是不可变序列,但并不是绝对不能改变,只是不支持直接更改,还是有其他的方法可以去增加和改变元组中的元素的。示例代码如下。
可以看到,用拼接的方式能够增加元组中的元素。需要注意的是,“tuple1[:2]”不包含索引值“2”的元素。当然,也可以使用拼接的方式对元组中的元素进行删除和修改。示例代码如下。
除了上面介绍的方法,列表和元组还有一些常用的操作。
(1)列表和元组的连接操作符。
“+”为连接操作符,可以起到拼接的作用,示例代码如下。
以上代码,完成了列表的拼接,元组也可以进行相应的操作,但是要注意元组和列表不能相互拼接。
(2)列表和元组的重复操作符。
“*”为重复操作符,可以进行一些重复的操作,示例代码如下。
(3)列表和元组的索引问题。
当列表和元组中包含列表或元组等元素时,元素索引示例代码如下。
从上述代码可知,在元素索引时,第一个中括号表示对列表或元组的索引,第二个中括号表示对列表或元组底层元素的索引。
Python中的字典(Dictionary)与实际的字典是比较相似的。实际中,如果想查找一个字,知道这个字的拼音或部首便可以查到。Python中的字典也是运用了这种思想,即字典中的每个元素都由键(key)值(value)对构成,这种类型也被称为映射,或者关联数组。字典为可变的容器模型,但是需要注意的是,键值对中的键是不可变的任意类型的数据类型,值是可以变的任意数据类型。
接下来,将介绍有关字典的一些方法。
创建字典有多种方法,但是要注意键值对的位置——键在前、值在后。示例代码如下。
还可以使用dict()方法来创建,用法及示例代码如下。
需要注意的是,dict()方法中关键字不能加上单引号,否则会出现错误,读者可以自行验证。
fromkeys()是创建字典的另一种方法。具体用法及示例代码如下。
需要注意的是,fromkeys()方法不会改变原本的字典,而是返回一个新建的字典。如果不注意的话,会出现下面这种情况。
从上面的代码段可以看到,最后“dict1”中仍然没有任何元素,写入的元素并没有被存储下来,这是由于在创建字典时,只有键,没有值。
字典的查找分为3类,即查找字典中的键、查找字典中的值和查找字典中的键值对。接下来分别介绍查找的方法。
(1)查找字典中的键。
查找字典中的键可以使用keys()方法。具体用法及示例代码如下。
在Python3中删除了has_key()方法,不能直接查找字典中是否含有某个键。如果想要查找可以采用in等方法,示例代码如下。
上述代码中,由于键“one”在字典“dict1”中存在,所以查找后结果为True,否则结果为False。
(2)查找字典中的值。
查找字典中的值可以使用values()方法。具体用法及示例代码如下。
字典中根据键来查找值可以使用get()方法。具体用法及示例代码如下。
上述代码中,由于键“three”不存在,所以查找其对应的值时返回空。
(3)查找字典中的键值对。
在字典中如果要显示全部键值对有几种方法。可以直接显示字典的全部内容,来显示当前字典中的键值对。示例代码如下。
也可以通过items()方法来查询所有的键值对。具体用法及示例代码如下。
字典增加键值对有几种方法。首先,可以使用直接给字典中的键赋值的方法,如果这个键存在,则会修改键所对应的值;若不存在,则会创建一个新的键,并且赋值。示例代码如下。
上面的方法比较简单,但是也存在一些问题,如同时增加多个键值对或者说直接把另一个字典融合进来。此时,可以使用update()方法来对字典进行操作。具体用法及示例代码如下。
同时,还有setdefault()方法也可以用来修改和查找字典。setdefault()会查找是否存在相应的键,若存在,则输出键所对应的值;若不存在,则新建一个键,并赋予默认值。具体用法及示例代码如下。
(1)根据键来删除字典中的元素。
pop()方法就是根据所提供的键来删除相应的键值对,并且在删除之前会输出键对应的值。具体用法及示例代码如下。
需要注意的是,当键不存在时,用pop()方法不设置返回值,就会报错,读者可以自行验证。
(2)随机删除键值对。
popitem()方法是随机删除掉字典中的一对键值对,并且返回所删除的键值对。具体用法及示例代码如下。
(3)删除全部键值对。
在字典中可以使用clear()方法来删除全部的键值对。具体用法及示例代码如下。
Python中的集合是一个无序的序列,而且在其中的元素都是不重复的。这是集合的一个重要特征。
集合用大括号就能直接创建,但是注意要与字典相区分。示例代码如下。
可以注意到,上例中多次输入了“2”和“3”,但是最后只有一次存储下来,这便是集合的特点,删除重复的元素。
集合是无序的,所以不能直接查找第几个元素。要想查找其中的元素,只能全部打印,或者使用in来判断该元素是否在集合中。示例代码如下。
在集合中支持使用add()和remove()方法来修改集合中的元素。具体用法及示例代码如下。
集合中有union()方法可以合并多个集合。具体用法及示例代码如下。