跟老齐学Python之有容乃大的list(3)
对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) Insertanitematagivenposition.Thefirstargumentistheindexoftheelementbeforewhichtoinsert,soa.insert(0,x)insertsatthefrontofthelist,anda.insert(len(a),x)isequivalenttoa.append(x).
这次就不翻译了。如果看不懂英语,怎么了解贵国呢?一定要硬着头皮看英语,不仅能够学好程序,更能...(此处省略两千字)
根据官方文档的说明,我们做下面的实验,请看官从实验中理解:
>>>all_users ['qiwsir','github','io'] >>>all_users.insert("python")#list.insert(i,x),要求有两个参数,少了就报错 Traceback(mostrecentcalllast): File"<stdin>",line1,in<module> TypeError:insert()takesexactly2arguments(1given) >>>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) Removethefirstitemfromthelistwhosevalueisx.Itisanerrorifthereisnosuchitem. list.pop([i]) Removetheitematthegivenpositioninthelist,andreturnit.Ifnoindexisspecified,a.pop()removesandreturnsthelastiteminthelist.(Thesquarebracketsaroundtheiinthemethodsignaturedenotethattheparameterisoptional,notthatyoushouldtypesquarebracketsatthatposition.YouwillseethisnotationfrequentlyinthePythonLibraryReference.)
我这里讲授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(mostrecentcalllast): File"<stdin>",line1,in<module> ValueError:list.remove(x):xnotinlist
注意两点:
如果正确删除,不会有任何反馈。没有消息就是好消息。
如果所删除的内容不在list中,就报错。注意阅读报错信息:xnotinlist
看官是不是想到一个问题?如果能够在删除之前,先判断一下这个元素是不是在list中,在就删,不在就不删,不是更智能吗?
如果看官想到这里,就是在编程的旅程上一进步。python的确让我们这么做。
>>>all_users ['python','qiwsir','github','io','algorithm'] >>>"python"inall_users#这里用in来判断一个元素是否在list中,在则返回True,否则返回False True >>>if"python"inall_users: ...all_users.remove("python") ...printall_users ...else: ...print"'python'isnotinall_users" ... ['qiwsir','github','io','algorithm']#删除了"python"元素 >>>if"python"inall_users: ...all_users.remove("python") ...printall_users ...else: ...print"'python'isnotinall_users" ... 'python'isnotinall_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(mostrecentcalllast): File"<stdin>",line1,in<module> IndexError:popindexoutofrange#删除索引超出范围,就是1不在list的编号范围之内
给看官留下一个思考题,如果要向前面那样,能不能事先判断一下要删除的编号是不是在list的长度范围(用len(list)获取长度)以内?然后进行删除或者不删除操作。
list是一个有意思的东西,内涵丰富。看来下一讲还要继续讲list。并且可能会做一个有意思的游戏。请期待。