1.列表的基本操作
针对列表的基本操作除了通用序列操作,还有赋值、插入、删除、排序等 。列表是可变对象类型,因此这些操作都是对原列表的修改,并不生成新的列表
(1)赋值
如果是单个索引,就是单个列表元素的赋值。如果同时给多个列表元素赋值,就可以利用强大的分片功能来赋值。
list是一个常用的类型转换函数。list(string)返回一个列表对象,字符串string的每个字符转换为列表的一个元素。
(2)删除元素
删除列表中指定位置一个或多个元素的操作是;del list【index】。
若要删除整个列表,使用命令:del listname。整个列表删除后,该列表名从命名空间释放,再次引用该列表就会触发异常
2.列表对象的基本方法
列表通过赋值定义后,生成列表对象。对列表 对象,可以直接调用对象内置的方法。
(1)添加元素append 和 extend
append的功能是向列表尾部 添加一个元素。append每次只能向列表中添加一个元素,如果需要在列表尾部添加多个元素,采用extend方法
在通用序列操作中有通过序列相加增长列表的方法。通过序列加法来增加序列元素的数目的方法和extend增长列表的方法不同:列表相加将生成一个新的列表,而extend是对原来列表的扩充,是对原列表的修改,在原地修改,并不生成新的列表。
(2)计数count、检索index和插入对象insert
count的功能是统计某个元素在指定列表中出现的次数。
index的功能是在列表中检索第一个匹配项的位置。若存在该内容,就返回第一个匹配元素在列表中的位置,若该内容不存在,则给出错误信息ValueError。
为避免检索一个不存在的内容,可先通过成员资格检查,当内容存在时再用检索返回具体的位置。
insert是向列表中插入对象的另一种方法。将insert中指定的对象插入到指定位置编号之前。
(3)弹出元素pop
列表是一个有序数据类型,与堆栈有类似之处,因此列表可以用来模拟堆栈。pop方法是将列表一个元素删去的操作。该操作有返回值,返回值就是从列表弹出的元素,但是
del方法没有返回值,这是两者的不同。
pop操作允许指定删除元素的位置,一般的堆栈操作应该满足“先进后出,后进先出”原则,所以pop只能模拟堆栈操作。pop方法中位置编号i是可以缺省的,缺省时,list.pop()表示从列表末尾删除一个元素并返回该值,这时才和堆栈相似了。
(4)移除remove、逆转reverse和排序sort
移除操作执行时首先在列表中检查是否存在要移除的内容,将遇到的第一个匹配项从列表中删除,并对其后面的元素重新编号。移除操作也是在原地修改列表,并没有任何返回值。如果没有找到要匹配的项,则出现数值错误异常。
reverse操作可以把列表中的元素的次序逆转,该方法也是在原地修改列表,无任何返回值。如果想把逆转后的列表生成一个新的列表,不能把reverse的返回值赋给一个列表,
这样只能得到一个空列表。如果要同时保留原列表和逆转后的列表,可先将原列表复制一份再进行逆转。
不能通过赋值语句将列表赋值给另一个列表,因为赋值语句并没有复制列表,只是多了一个指向同一个列表的指针。
sort方法默认情况下是按照元素的升序重新排列原列表的元素。排序也不生成新的列表,是对原列表的修改,所以将列表排序后赋值给另一个列表的操作y=x.sort()后,y将是一个空列表,其逻辑值为None
list.sort(key=None,reverse=False)
sort有两个主要参数,reverse表示是否逆序,reverse为True时实现逆序排序;key是排序的依据,比如要根据列表元素的长度进行排序,可以将长度函数len作为关键字。
key=len
sort的两个参数可以单独使用,也可以一起使用
3.列表的应用
列表可以用于实现堆栈、队列、矩阵等数据结构。基于列表的append和pop方法,通过append从列表末尾添加元素,用不带位置编号的pop操作从列表尾弹出数据,可以很好的模拟堆栈操作
列表嵌套可以构建矩阵。需注意的是列表元素编码都是从0开始的,而矩阵的行列值可能从1开始。