目录
2.3.3 列表方法
方法是一个与某些对象有紧密联系的函数,对象可能是列表、数字,也可能是字符串或其他类型的对象。调用方法:对象.方法(参数)
1. append
Append方法用于在列表末尾追加新的对象
>>> lst = [1,2,3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
Ps:list是一个内建函数,所以不能用于作为变量名,变量名要尽可能有意义,如表示价格prices、prices_of_eggs,或者pricesOfEggs。
Append不是简单返回一个修改过的新列表---而是直接修改原来的列表。(不返回值)
2. count
count方法统计某个元素在列表中出现的次数
>>> ['to','be','or','not','to','be'].count('to')
2
>>> x = [[1,2],1,1,[2,1,[1,2]]] # [1,2], 1, 1, [2,1,[1,2]] 总共四个元素
>>> x.count(1)
2
>>> x.count([1,2])
1
3. extend
extend方法可以在列表的末尾一次性追加另一个序列中的多个值。换句话说:扩展原有的列表
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
像是连接操作extend方法修改了被扩展的序列,在这个例子中就是a,而原始的连接操作则不然,原始的会返回一个全新的列表
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a + b
[1, 2, 3, 4, 5, 6]
>>> a #a的值并没有被修改
[1, 2, 3]
原始的连接操作创建了一个包含了a和b副本的新列表.
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a = a+b #连接效率比extend低
>>> a
[1, 2, 3, 4, 5, 6]
同样,这里也不是一个原位置操作,他并不会修改原来的列表 ???
可以使用分片赋值来实现
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a[len(a):] = b # a[3:]=b也就是a[3]以后的值就是追加b
>>> a
[1, 2, 3, 4, 5, 6]
4. index
Index方法用于从列表中找出某个值第一个匹配项的索引位置
>>> knights = ['we','are','the','knights','who','say','ni']
>>> knights.index('who')
4
>>> knights = ['we','are','the','knights','who','say','ni','who']
>>> knights.index('who')
4
值不存在会报错ValueError: 'herring' is not in list
>>> knights = ['we','are','the','knights','who','say','ni']
>>> knights.index('herring')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'herring' is not in list
5. insert
Insert方法用于将对象插入到列表中
>>> numbers = [1, 2, 3, 5, 6, 7]
>>> numbers.insert(3,'four') #注意索引3不能加引号
>>> numbers
[1, 2, 3, 'four', 5, 6, 7]
与extend方法一样,insert方法操作也可以用分片赋值来实现
>>> numbers = [1, 2, 3, 5, 6, 7]
>>> numbers[3:3] = ['four'] #注意此处的中括号,[3:3]
>>> numbers
[1, 2, 3, 'four', 5, 6, 7]
>>> numbers[3:3] = 'four' #不加列表括号
>>> numbers
[1, 2, 3, 'f', 'o', 'u', 'r', 5, 6, 7]
6. pop
pop方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值
>>> x = [1,2,3]
>>> x.pop()
3
>>> x
[1, 2]
>>> x.pop(0)
1
>>> x
[2]
Ps:Pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法
>>> x = [1,2,3,None]
>>> x.pop()
>>>
如图,None不返回
使用pop方法可以实现一种常见的数据结构---栈(先进后出),如放盘子,只能从顶部放入,拿也只能从顶部拿走,最后被放入堆栈的最先被移除(这个原理称为LIFO,即后进先出)
放入和移出----入栈(push)和出栈(pop),python没有入栈方法,但可以用append方法来代替,pop和append的操作结果恰好相反,如果入栈(或者追加)刚刚出栈的值,最后得到的结果还是原来的栈。
>>> x = [1,2,3]
>>> x.append(x.pop()) #x.pop()拿到3,x.append(3)两者相抵消
[1, 2, 3]
Ps:如果需要实现一个先进先出(FIFO)的队列(queue),那么可以使用insert(0,...)来代替append方法。或者,也可以继续使用append方法,但必须用pop(0)来代替pop(),更好的解决方案是使用collection模块中的deque对象。参考第10章
>>> x = [1,2,3]
>>> x.insert(0,-1) #先进
>>> x
[-1, 1, 2, 3] #后出
>>> x.pop()
3
>>> x
[-1, 1, 2]
>>> x = [1,2,3]
>>> x.append(4)
>>> x
[1, 2, 3, 4]
>>> x.pop(0)
4
>>> x
[1, 2, 3]
7. remove
remove方法用于移除列表中某个值的第一个匹配项(前面有index找第一个匹配值的索引)
>>> x = ['to','be','or','not','to','be']
>>> x.remove('be')
>>> x
['to', 'or', 'not', 'to', 'be']
>>> x.remove('bee') #和index类似不存在的就会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
且只移除第一次出现的值,不存在于列表中的值不会被移除
Remove是一个没有返回值的原位置改变方法,他修改了列表却并没有返回值,这点与pop方法相反,也可以这样移除。
>>> x = ['to','be','or','not','to','be']
>>> x.remove(x[1])
>>> x
['to','or','not','to','be']