2 列表与元组(3)

目录

2.3.3 列表方法

1. append

2. count

3. extend

4. index

5. insert

6. pop

7. remove

下一小节:reverse以及sort排序等方法


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']

下一小节:reverse以及sort排序等方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值