Python List的常用操作之增、删
概述
Python的List是一种典型的序列型数据,意味着它由挺多挺多的元素构成,就像一排蜂巢快递柜一样,里面放着各种各样的东东。但是,这个List比蜂巢快递柜好的一点是我们List存放数据需要的格子可以根据需要随时的增加、减少,真正实现“按需分配”。
那么,问题来了。如果我们的List里面如果存放的东西特别特别长,那我们自己也不知道某个东西它在List的哪个位置上。所以,我们需要有办法对List里面的内容进行增、删、改、查等操作。就像快递柜需要有个屏幕来进行一些基本操作。
那我们分别看看Python之List的增、删、改、查的操作中的增、删。
增
增所解决的问题是从无到有、从有到多的问题。
从无到有容易理解,就是本来没有这个List,我们来创建这个List。在计算机世界,虽然创建一个东西是非常非常容易的,可以不花一分钱随时随地去创建使用一个量,但也要注意我们的计算机资源的占用情况,特别当运行一些大数据集、复杂运算的时候。
从无到有:创建。
直接使用[]把内容括进来,里面用逗号隔开各个元素,然后再起个名字就行了。
比如:
list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
从上面代码,你会发现Python的List里面的元素不要求类型相同。甚至,你可以创建一个空的列表,例如下面这样:
>>> list1=[]
>>> type(list1)
<type 'list'>
>>> len(list1)
0
从有到多
这种情况可就多了。
(1). 从结尾处多元素,比如像下面这样,本来是一个空的列表list1,使用append函数在它的后面加上一个元素1.
>>> list1.append(1)
>>> list1[1]
(2).在其中某个指定的位置插入元素,比如下面这样,调用insert函数指定插入的位置(index)和插入的值,本来只有[1]的list1,我们指定在其index为0的位置插入一个2,变成下面这个样子。
>>> list1.insert(0,2)
>>> list1[2, 1]
(3).前面两种情况都是插入元素,我们还可以插入另一个list,像下面这样在结尾处为list1接上另一个list2. 这个操作,还可以通过"list1+list2"来操作。
>>> list2=[3,4]
>>> list1.extend(list2)
>>> list1[2, 1, 3, 4]
(4)相对应的,怎样在一个指定的位置插入一个List呢?这里没有直接的函数来实现,不过我们可以变通一下,在想要插入新的list的地方将整个list切成两段,然后再把它们加在一起,就像下面这样:
>>> list1=list1[0:2]+list2+list1[2:4]
>>> list1
[2, 1, 3, 4, 3, 4]
好了,增加的部分我们掰扯清楚了,我们再来看看删除的操作。
删除
逻辑上讲,删除是增加的逆操作,相对应的就应该有:从有到无、从多到少两类删除操作。
从有到无
也可以分成两种情况,一种就是将list里面的内容清空但是list这个空壳还在;另一种就是直接将整个list给杀死掉让它再也不存在。这两种都可以用del函数来实现,如下所示:
>>> del list2[:]
>>> list2
[]
>>> del list2
>>> list2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'list2' is not defined
大家注意,上面的示例代码中,”del list2[:],“我们把list2的内容清空了,但是list2还存在所以打印list2的时候出现一行[],我们使用“del list2",后面不加中括号,那么整个list2都被我们给抹去了。当然,清空内容也可以用"list2=[]"来实现,就是重新定义个新的、空的list2把原来的list2给覆盖掉,实现的效果和清空是一样一样的。
从多到少
从多到少的情况有好几种之多。指定删除某个元素、删除一段元素;指定删除某个元素还可分为:根据索引删除元素、根据元素的内容删除元素等。主要靠del、remove、pop这三个函数来实现的,我们分别来看一下。
(1)del,这个函数相当的好用啊,与我们前面使用del list[]这种格式类似,在中括号里面写入适当的值我们可以实现删除指定的索引的元素,如下面代码所示。
>>> list1
[2, 1, 3, 4, 3, 4]
>>> del list1[0] #删除索引为0的元素
>>> list1[1, 3, 4, 3, 4]
>>> del list1[1:2] #删除索引1(包含)开始到2(不包含)之前的元
>>> list1
[1, 4, 3, 4]
>>> del list1[3:] #删除从索引3(包含)及后面所有的元素
>>> list1[1, 4, 3]
>>> del list1[1:] #删除从索引1(包含)及后面所有的元素,即只剩下list1[0]
>>> list1
[1]
从上面代码可知,del函数是相当滴强大,几乎所有和索引相关的删除都能够实现。
(2)remove,这个函数比较有意思,它的功能是删除列表中某个指定的值。注意:我们调用这个函数删除的时候删除这个列表中第一次出现的那个,比如下面这段代码:
>>> list1=[0,1,2,1,3,4,5,6]
>>> list1.remove(1) #删除了list1中的第一个1
>>> list1
[0, 2, 1, 3, 4, 5, 6]
那么,如果如果我们想把list1中所有的1都删除怎么办呢?那就需要稍微麻烦一点,我们可以这么做:
>>> list1=[0,1,2,1,3,4,5,6]
>>> while 1 in list1:
... list1.remove(1)
...
>>> list1
[0, 2, 3, 4, 5, 6]
在上面这段代码中,我们就把list1中所有的值为1的元素都删除了。
那么,入果我们调用remove删除一个list中不存在的值会出现什么情况呢?它会无情地报错的,所以在不确定一个元素是否在list中但是又想删除它,那么在调用remove删除之前最好能先判断一下它是否存在于这个list中。
(3)pop,这个函数呢可以帮助我们删除list指定索引处的元素,而且这个函数相对于前面的函数有它的个性,就是它删除的同时会把这个索引的列表的值返回,好像是在指定位置把那个位置处的列表值给揪出来看一下这个值是什么一样,当然,揪出来了之后并没有放回原来的list中。如下所示:
>>> list1=[0,1,2,3,4,5]
>>> list1.pop(3)
3
>>> list1
[0, 1, 2, 4, 5]
那你可能会问了,我们调用pop的时候可不可以像del一样用类似于(0:2)这样指定一段索引来删除列表中的一块元素呢?对不起,如果你这样做的话,python会报错。
这篇文章就先介绍列表的增、删吧。关于list的改和查,请期待下一篇文章”02Python数据结构List的改、查“。
注意:本文中的Python使用的是2.7版本。