跟老齐学Python之有容乃大的list(3)

2019-10-05 19:17:26刘景俊

先实验list.remove(x),注意看上面的描述。这是一个能够删除list元素的方法,同时上面说明告诉我们,如果x没有在list中,会报错。

>>> all_users
['python', 'http://', 'qiwsir', 'github', 'io', 'algorithm']
>>> all_users.remove("http://")
>>> all_users    #的确是把"http://"删除了
['python', 'qiwsir', 'github', 'io', 'algorithm']

>>> all_users.remove("tianchao")    #原list中没有“tianchao”,要删除,就报错。
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

注意两点:

如果正确删除,不会有任何反馈。没有消息就是好消息。
如果所删除的内容不在list中,就报错。注意阅读报错信息:x not in list
看官是不是想到一个问题?如果能够在删除之前,先判断一下这个元素是不是在list中,在就删,不在就不删,不是更智能吗?

如果看官想到这里,就是在编程的旅程上一进步。python的确让我们这么做。

>>> all_users
['python', 'qiwsir', 'github', 'io', 'algorithm']
>>> "python" in all_users    #这里用in来判断一个元素是否在list中,在则返回True,否则返回False
True

>>> if "python" in all_users:
...   all_users.remove("python")
...   print all_users
... else:
...   print "'python' is not in all_users"
... 
['qiwsir', 'github', 'io', 'algorithm']   #删除了"python"元素

>>> if "python" in all_users:
...   all_users.remove("python")
...   print all_users
... else:
...   print "'python' is not in all_users"
... 
'python' is not in all_users    #因为已经删除了,所以就没有了。

上述代码,就是两段小程序,我是在交互模式中运行的,相当于小实验。

另外一个删除list.pop([i])会怎么样呢?看看文档,做做实验。

>>> all_users
['qiwsir', 'github', 'io', 'algorithm']
>>> all_users.pop()   #list.pop([i]),圆括号里面是[i],表示这个序号是可选的
'algorithm'       #如果不写,就如同这个操作,默认删除最后一个,并且将该结果返回

>>> all_users
['qiwsir', 'github', 'io']

>>> all_users.pop(1)    #指定删除编号为1的元素"github"
'github'

>>> all_users
['qiwsir', 'io']
>>> all_users.pop()
'io'

>>> all_users      #只有一个元素了,该元素编号是0
['qiwsir']
>>> all_users.pop(1)  #但是非要删除编号为1的元素,结果报错。注意看报错信息
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: pop index out of range   #删除索引超出范围,就是1不在list的编号范围之内

给看官留下一个思考题,如果要向前面那样,能不能事先判断一下要删除的编号是不是在list的长度范围(用len(list)获取长度)以内?然后进行删除或者不删除操作。