上一篇:Python 序列通用操作介绍
列表是可变的(mutable)——可以改变列表的内容,这不同于字符串和元组,字符串和元组都是不可变的。接下来讨论一下列表所提供的方法。
可以使用list函数来创建列表:
list('Hello') ['H', 'e', 'l', 'l', 'o']
在 Python 序列通用操作介绍 中提及的操作全部适用于列表,例如索引、分片、连接、乘法等。而且由于列表是可以修改的,所以多了一些元素赋值、元素删除、分片赋值的方法。
>>> >>> a=list('ooooo') >>> a[2]='A' >>> a ['o', 'o', 'A', 'o', 'o'] >>>
使用 del 对列表元素进行删除:
>>> a ['o', 'o', 'A', 'o', 'o'] >>> del a[2] >>> a ['o', 'o', 'o', 'o'] >>> len(a) 4
删除之后,列表的长度也变成了4.关于del语句的使用后续介绍。
使用分片赋值可以同时改变一个范围内的字符:
>>> >>> str1= list('abcdef') >>> str1 ['a', 'b', 'c', 'd', 'e', 'f'] >>> str1[3:]=list('abc') >>> str1 ['a', 'b', 'c', 'a', 'b', 'c'] >>>
不止如此,分片赋值更强大的功能是使用 长度不等 的序列替换分片:
#长序列替换短分片 >>> str2=list('ppp') >>> str2 ['p', 'p', 'p'] >>> str2[1:]=('ython') >>> str2 ['p', 'y', 't', 'h', 'o', 'n'] >>>
>>>#短序列替换长分片 >>> str2= list('abcdefg') >>> str2 ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> str2[1:]= list('bc') >>> str2 ['a', 'b', 'c'] >>>
利用分片操作,我们可以实现序列的插入操作---插入不过是替换掉某段“空”分片:
>>> str3=[1,5] >>> str3[1:1]=[2,3,4] >>> str3 [1, 2, 3, 4, 5] >>>
方法与函数关系密切。方法本身就是函数,只不过这函数是和对象结合在一起的,通过对象来调用方法。面向对象语言中这些方法可称为接口。方法调用的语法为:
对象.方法(参数)
接下来我们就来看看列表这种类型的对象提供了什么方法(接口)。
>>> lst=[1,2,3] >>> lst.append(4) >>> lst [1, 2, 3, 4] >>>
>>> [1,2,3,4,5,2,3,1,2,3,42,1,2,3,5].count(1) 3 >>>
>>> >>> a=[1,2,3] >>> b=[4,5,6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6] >>>
>>> a=['Me','and','my','broken'] >>> a.index('my') 2 >>>
>>> >>> number=[1,2,3,4,5] >>> number.insert(3,'hello') >>> number [1, 2, 3, 'hello', 4, 5] >>> number.insert(3,6) >>> number [1, 2, 3, 6, 'hello', 4, 5] >>>
>>> >>> number=[1,2,3,4,5,6,7,8] >>> a = number.pop() >>> a 8 >>> number [1, 2, 3, 4, 5, 6, 7] >>>
利用append(从末尾添加一个元素)方法,我们可以来实现一种常见的数据结构--栈。
当然,POP方法可以从序列中弹出任意位置的元素:
>>> >>> number [1, 2, 3, 4, 5, 6, 7] >>> number.pop(3) 4 >>> number [1, 2, 3, 5, 6, 7] >>>
功能:从列表中移除某个值的第一个匹配项。与pop不同的是,该方法并不返回移除的元素。
>>> str4 = list('hello') >>> str4 ['h', 'e', 'l', 'l', 'o'] >>> str4.remove('l') >>> str4 ['h', 'e', 'l', 'o'] >>>
>>> >>> number [1, 2, 3, 5, 6, 7] >>> number.reverse() >>> number [7, 6, 5, 3, 2, 1] >>>
注意该方法改变了列表但是没有返回值。
如果需要对一个序列进行反向迭代,可以使用 reversed函数 。这个函数并不返回一个列表,而是返回一个迭代器对象,可以使用list把迭代器对象转换成列表:
>>> >>> number [7, 6, 5, 3, 2, 1] >>> number = list(reversed(number)) >>> number [1, 2, 3, 5, 6, 7] >>>
功能:用于在原位置度列表进行排序。在原位置意味着列表会被修改。
>>> number [1, 4, 3, 7, 4, 8, 3, 2, 7, 9] >>> number.sort() >>> number [1, 2, 3, 3, 4, 4, 7, 7, 8, 9] >>>
应注意的是,sort()方法的返回值并不是序列本身,而是None。
>>> >>> x = [3,5,7,3,1,2,4] >>> y =x[:] >>> y.sort() >>> x [3, 5, 7, 3, 1, 2, 4] >>> y [1, 2, 3, 3, 4, 5, 7] >>>
注意将列表x赋值给列表y时千万别使用直接赋值,否则y与x指向了相同的对象,对y的修改即是对x的修改:
>>> >>> x [3, 5, 7, 3, 1, 2, 4] >>> y=x >>> y.sort() >>> x [1, 2, 3, 3, 4, 5, 7] >>> y [1, 2, 3, 3, 4, 5, 7] >>>
当然,你也可以使用函数来进行排序。
函数:sorted().
功能:对任何 序列 进行排序,结果返回一个排好序的 列表 。
>>> >>> x=[3,5,2,1,7,4,8,9,3] >>> y=sorted(x) >>> x [3, 5, 2, 1, 7, 4, 8, 9, 3] >>> y [1, 2, 3, 3, 4, 5, 7, 8, 9] >>>
从上面的例子我们看到,sort方法的默认排序都是升序的。sort方法有两个可选的参数,可以通过它来修改排序规则:
key参数提供一个在排序过程中使用的函数,利用该函数来为列表中元素创造一个键(key),依据键来对列表元素(值)进行排序。
>>> >>> str5= ['one','year','like','any','old','other','year'] >>> #默认的排序依据字符串排序规则 >>> str5.sort() >>> str5 ['any', 'like', 'old', 'one', 'other', 'year', 'year'] >>> #使用key参数来修改排序规则 >>> #我们使用字符长度作为键来排序 >>> str5.sort(key=len) >>> str5 ['any', 'old', 'one', 'like', 'year', 'year', 'other'] >>>
另一个参数reverse是个简单的bool值,用来指明是否要反向排序;
>>> >>> num=[2,3,4,5,6,78,4,3,3,4,5,8,9] >>> num.sort() >>> num [2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 8, 9, 78] >>> num.sort(reverse=True) >>> num [78, 9, 8, 6, 5, 5, 4, 4, 4, 3, 3, 3, 2]
借助参数key,我们可以定义自己的比较函数来自定义比较规则。函数的定义在后面进行介绍。
多谢看完文章,如所记有差错恳请指出。