一个人叫个人,多个人称之为团体,一个人模式很单一,自我约束,团体里面的人就不一样了,每个团体都有自己内部的约束和管理模式,对于团体里面的个人,其行为不能超出团体的管束范围;

对应我们今天讲到的集合,也是一样,就是一个集中存放了不同数据我们称之为“容器”的东西。


一、list

Python内置的一种数据类型是列表-->list,它是一个有序的集合(注意是有序),可以随时添加和删除元素。

格式 :L = [元素1,元素2,元素3.....]

空list:L = [],其长度  len(L) = 0


例子1:我们用一个list来表示一个人的基本信息,也就是这个list里面存放的有姓名,年龄,体重,还有性别,我们用boolean表示性别,True表示F,False表示M

首先我们来初始化一个这样的列表


>>> L=['科比',38,True,85.4]
>>> L
['科比', 38, True, 85.4]


下面我们用之前学到的占位符,组合这个人的基本信息,其中我们肯定要访问这个列表的各个元素

>>> print('姓名:%s,年龄:%d,男性:%s,体重:%.1f,总过%d个元素' %(L[0],L[1],L[2],L[3],len(L)))
姓名:科比,年龄:38,男性:True,体重:85.4,总过4个元素


还要说一句,Python这种动态赋予数据类型的好处就是,我们在创造数据的时候,我们不关心数据类型本身,而是交给解释器来判定,这就好比,一个圈子里的人,肯定都是相互熟悉的,见面了就不用那么拘束,每次称呼对方还得叫出全名,我叫对方的昵称,对方知道我在叫他是不是就省事多了,免了很多客套,我们可以简单理解为对号入座。


list 添加和删除元素

(1)添加-->append(内容)函数和insert(位置Index,内容)函数

例子2:为L添加一个身高元素,我们可以添加到末尾(默认就是添加到了末尾L.append(内容)),也可以添加到我们指定的位置,比如我要添加到性别和体重之间,就是L.insert(3,身高),第一个参数索引3表示L中第三个元素是性别,也就是在这个性别元素后面我们再insert一个元素身高



如果,此时我们想访问我们新添加的身高元素,有几种方法呢?

list为我们提供了两种访问元素的方式,一个是顺时针访问(左-->右,正),另一个当然是逆时针访问了(右-->左,负)


(2).删除-->pop() 不传参数表示删除最后一个元素,list集合因为是有序的,具有栈的结构,先进后出,反之,最后进来的"最先出去"

【题外话,后面讲到的set,也是一种集合,但它却不是有序的,它也有pop()方法,但是pop()弹出的元素却不是最后一个,而是在set集合中存放位置最前的元素,但由于它不是有序的,所以它的pop方法不提供参数,也就是,它不能像list那样可以随意删除任何位置的元素,下面插播一下效果图:】





根据上图,我们弹出这个身高元素


我们再试着弹出元素性别,因为性别不是最后一个元素,显有不能直接使用pop(),我们给pop()函数传递一个位置索引,根据上面提到的,我们可以正着删,也可以反着删,这里我们就反着删:


(3)list元素

list是一个可变的集合,因为我们在初始化一个list列表后,如果对list中的数据不满意的话,我们可以后续再修改,接着上面的L,年龄是会发生变化的,当然身高也会,但是身高毕竟是有个限制的,所以,这里我们来试着修改一下年龄,将38改为39,毕竟偶像也会老啊


list中的元素并不只是‘一个元素',我们可以为list再添加一个list,比如,我们需要一个address的地址信息,地址包含了所在的国家、地区还有工作地点,我们先来定义一个adress的列表集合

>>> adress = ['美国','洛杉矶','NBA']
>>> adress
['美国', '洛杉矶', 'NBA']

接下来,我们用append()追加这个adress的list集合到L的末尾,并访问我们想要的信息


对于三维,四维,N维数组,都可以照着上面的玩,不过维数越高,越复杂......


二、tuple

tuple,谷歌翻译-->元组,哈哈,卖个萌,在python中,它和list类似,都是一个有序的集合,但不同的是,list是可变的,tuple是不可变的,怎么讲呢,打个比方吧,对于一个人来说,不变的是什么,(举这个例子有点牵强,因为性别都是可以改变的,知道就好),假设,姓名不会变,当然性别也不会,出生日期肯定是变不了的,我们根据这三个信息,来建立一个tuple元组叫做PersonInfo吧

格式    : tuple = (元素1,元素2,.....)

空元组: tuple=(),其长度 len(tuple) = 0

元组包含一个元素时需注意:

需要在第一个元素的后面,加个逗号,消除歧义!



>>> PersonInfo = ('李四','男','19950523')
>>> PersonInfo
('李四', '男', '19950523')
>>>


A、访问元素,和list一样,两种方式

B、添加元素?

怎么能这样,不是说和list类似嘛,怎么list有这两个函数,tuple就不行呢,注意还有句话,很关键,tuple是不可变的,也就是说tuple一旦初始化数据,其内部就封死了,只读不能写。难道我们就没有办法了嘛?

例子:初始化一个Info元组,里面包含了年龄和体重,我们结合上面的PersonInfo,将这两个"相加",得到一个新的元组,我们定义为Person



是不是也可以达到我们想要的添加效果,但是这种追加的毕竟不够灵活,所以,我们再使用tuple的时候,一定要先想好,我们要放哪些不可变的数据(常量数组),避免不必要的麻烦。


我们还可以在定义tuple,并初始化数据的时候,将其中的一个元素,改为list对象,这样的话,表面上tuple是不可变的(全局看),实际上tuple内部存在的list对象里面的元素又是可以被修改的(局部看),所以,不要怀疑你看到的,tuple仍然是不可变的。

我们重新定义PersonInfo,它仍然是tuple类型,但是我们在原有的基础上,再给它初始化一个表示Info的list列表(上面的info,是独立的元组,这里是内部的list对象)

>>> PersonInfo=('李四','男','19950523',[22,62.5])
>>> PersonInfo
('李四', '男', '19950523', [22, 62.5])
>>> len(PersonInfo)

4

我们可以看到,虽然有5个'元素',但是PersonInfo的长度却是4

我们尝试着"修改"PersonInfo,将其中的体重改为65.5(身体是革命的本钱,伙食好的同时注意勤加锻炼!)



我们发现,我们用这种方式,就可以很轻松的攻破tuple数据一成不变的个性,这样的好处是,我们即可以对外提供可读的数据,也可以对外提供即可读也可写的数据,如果你用list,试想一下,可以这样吗?当然可以,因为list中的元素也可以是一个tuple对象!道理是一样的。


C、删除元素?

和添加一样,tuple没有删除元素的方法,有一个,就是对这个元组整体删除 del,但是整体删除后,再访问这个元组,就会出错,因为对象都不存在了




结束语:不要过分相信你所看到的,也不要过分相信自己所猜测的,解密答案的唯一标准就是检验与实践!


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐