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


Posted in Python onSeptember 15, 2014

对list的操作

向list中插入一个元素

前面有一个向list中追加元素的方法,那个追加是且只能是将新元素添加在list的最后一个。如:

>>> all_users = ["qiwsir","github"]
>>> all_users.append("io")
>>> all_users
['qiwsir', 'github', 'io']

从这个操作,就可以说明list是可以随时改变的。这种改变的含义只它的大小即所容纳元素的个数以及元素内容,可以随时直接修改,而不用进行转换。这和str有着很大的不同。对于str,就不能进行字符的追加。请看官要注意比较,这也是str和list的重要区别。

与list.append(x)类似,list.insert(i,x)也是对list元素的增加。只不过是可以在任何位置增加一个元素。

我特别引导列为看官要通过官方文档来理解:

list.insert(i, x)

Insert an item at a given position. The first argument is the index of the element before which to insert, so a.insert(0, x) inserts at the front of the list, and a.insert(len(a), x) is equivalent to a.append(x).

这次就不翻译了。如果看不懂英语,怎么了解贵国呢?一定要硬着头皮看英语,不仅能够学好程序,更能...(此处省略两千字)

根据官方文档的说明,我们做下面的实验,请看官从实验中理解:

>>> all_users
['qiwsir', 'github', 'io']
>>> all_users.insert("python")   #list.insert(i,x),要求有两个参数,少了就报错
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: insert() takes exactly 2 arguments (1 given)

>>> all_users.insert(0,"python")
>>> all_users
['python', 'qiwsir', 'github', 'io']

>>> all_users.insert(1,"http://")
>>> all_users
['python', 'http://', 'qiwsir', 'github', 'io']

>>> length = len(all_users)
>>> length
5

>>> all_users.insert(length,"algorithm")
>>> all_users
['python', 'http://', 'qiwsir', 'github', 'io', 'algorithm']

小结:

list.insert(i,x),将新的元素x 插入到原list中的list[i]前面
如果i==len(list),意思是在后面追加,就等同于list.append(x)
删除list中的元素

list中的元素,不仅能增加,还能被删除。删除list元素的方法有两个,它们分别是:

list.remove(x)
Remove the first item from the list whose value is x. It is an error if there is no such item.
list.pop([i])
Remove the item at the given position in the list, and return it. If no index is specified, a.pop() removes and returns the last item in the list. (The square brackets around the i in the method signature denote that the parameter is optional, not that you should type square brackets at that position. You will see this notation frequently in the Python Library Reference.)

我这里讲授python,有一个习惯,就是用学习物理的方法。如果看官当初物理没有学好,那么一定是没有用这种方法,或者你的老师没有用这种教学法。这种方法就是:自己先实验,然后总结规律。

先实验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)获取长度)以内?然后进行删除或者不删除操作。

list是一个有意思的东西,内涵丰富。看来下一讲还要继续讲list。并且可能会做一个有意思的游戏。请期待。

Python 相关文章推荐
Python 迭代器工具包【推荐】
May 06 Python
Python中operator模块的操作符使用示例总结
Jun 28 Python
python中模块查找的原理与方法详解
Aug 11 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
Python 忽略warning的输出方法
Oct 18 Python
在Python中使用Neo4j的方法
Mar 14 Python
python实现手机销售管理系统
Mar 19 Python
Python2与Python3的区别实例总结
Apr 17 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
python dict如何定义
Sep 02 Python
python 如何设置守护进程
Oct 29 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 #Python
跟老齐学Python之有容乃大的list(1)
Sep 14 #Python
跟老齐学Python之一个免费的实验室
Sep 14 #Python
跟老齐学Python之从if开始语句的征程
Sep 14 #Python
跟老齐学Python之眼花缭乱的运算符
Sep 14 #Python
跟老齐学Python之玩转字符串(3)
Sep 14 #Python
跟老齐学Python之玩转字符串(2)
Sep 14 #Python
You might like
对盗链说再见...
2006/10/09 PHP
在同一窗体中使用PHP来处理多个提交任务
2006/10/09 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP Reflection API详解
2015/05/12 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
Python数据类型学习笔记
2016/01/13 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
django之自定义软删除Model的方法
2019/08/14 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
简约控的天堂:The Undone
2016/12/21 全球购物
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
经济管理专业自荐信
2013/12/30 职场文书
高中生自我评语大全
2014/01/19 职场文书
干部鉴定材料
2014/05/18 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫
Python 绘制多因子柱状图
2022/05/11 Python