3、Python基本类型之列表

一、列表

    python中定义一个列表的基本语法是:[1,"python",12.34]。这个列表包含三个元素,整型的1,字符串类型的"python"和浮点数12.34。so,我们可以得出结论,列表中的元素类型可以是不同的数据类型(可以思考为毛可以)

在我们学习了列表的数据类型定义后,下面我们来看一下列表的操作(增删改查)。

     列表中增加一个元素

1 list = [1,"python",12.34]
2 list.append("高大腿")  #在列表的最后添加一个元素 结果显示 [1,"python",12.34,"高大腿"]
3 list.insert(1,"I") #在下标为1(计算机中下标都是从0开始)的位置插入"I",执行结果[1,"I","python",12.34,"高大腿"]
4 list.insert(-1,"6666") #在下标为-1(倒数第一)的位置插入"6666",执行结果[1,"I","python",12.34,"6666","高大腿"]
5 list.append([1,2,3,4]) #在列表中插入一个列表元素 执行结果[1,"I","python",12.34,"6666","高大腿",[1,2,3,4]]
6 print(list)

上面展示了列表的插入操作,总结如下

         1、如果想在列表最后一个位置插入元素,请用append方法。

         2、如果想在列表的任意一个位置插入一个元素,请用insert方法,insert方法为插队方法,每次插入一个位置后,该位置后面的人依次向后移动。

         3、insert方法中,当下标为负数时(-1)表示倒数的意思,比如-1就表示倒数第一个元素(可以思考是否可以用insert方法在列表的最后插入一个元素)。

         4、列表中插入一个"元素",这里的元素指的是任意的数据类型的数据,当然也可以是列表,第6行的语法就是在列表的最后一个位置插入了一个列表元素。

       删除列表元素:

1 list = ["I","like","learn","python","and","you","?"]
2 #del list #删除列表
3 del list[0]  #删除列表第一个(下标为0)元素 执行结果['like', 'learn', 'python', 'and', 'you',"?"]
4 list.pop() #删除列表最后一个元素 执行结果['like', 'learn', 'python', 'and', 'you']
5 list.remove("like") #删除列表中元素为"like"的元素 执行结果['learn', 'python', 'and', 'you']
6 b = "like"  in list  #判断一个元素是否在列表中,执行结果False
7 b = "like"  not in list #判断一个元素是否不在列表中,执行结果True
8 print  list

上面展示了列表删除的操作,总计如下:

        1、del 关键字是python内置的一个命令,其不光可以删除列表还可以删除其他类型的数据(牛B的一塌糊涂),但del list慎用,这就好比删除数据库中表的命令,要考虑一下后果(^ ^)。

        2、删除列表中的任意一个位置的元素也是用del命令,语法如代码3,这个操作的功能和insert是一对冤家,但语法上稍有不同。

        3、删除列表中最后一个元素用pop方法,这个方法和append方法是一对冤家。

        4、remove方法是用于删除列表中的元素,其不是通过列表下标删除,而是通过元素内容删除,然鹅,我们有时候并不确定列表中是否存在我们想删除的元素,这时,我们需要用in 或者not in方法判断一下(代码6,7行)。

    修改列表元素:

1 list = ["I","like","learn","python","and","you","?"]
2 list[0] = "you"  #修改列表中任意一个位置的元素 执行结果 ['you', 'like', 'learn', 'python', 'and', 'you', '?']
3 print  list

修改元素比较简单:只有通过下标重新赋值即可。

查询列表元素:

1 list = ["I","like",["gwx",18]]
2 print  list[1]   #查看列表的第2个元素(下标为1),执行结果 like
3 print  list[2] #查看列表的第3个元素,执行结果['gwx', 18]
4 print  list[2][0] #查看列表第2个元素的第一个元素,执行结果gwx
5 print  list[-1] #查看列表的最后一个元素,执行结果['gwx', 18]

列表元素的查询主要就是通过下标(索引)进行读取,层层递进直到取到你最终想要的元素,也是很好理解的,值得一提的是,索引下标为负时,同样表示倒数的意思,比如代码5。

列表元素的其它玩法:

    除了以上的增删改查,对于列表元素还有一些其它的用法;

1 list = ["I","like",["gwx",18],"I"]
2 print list.count("I")  #统计列表中某个元素的个数 执行结果 2
3 print  list.index("like") #返回某个元素在列表中的索引,执行结果1
4 list.reverse() #列表的反转 执行结果['I', ['gwx', 18], 'like', 'I']
5 list1  = [11,2,3,8,9,1]
6 list1.sort()  #排序,执行结果[11, 9, 8, 3, 2, 1]
7 list.extend(list1) #合并两个列表,执行结果 ['I', ['gwx', 18], 'like', 'I', 1, 2, 3, 8, 9, 11]
8 print (list)

关于copy:

    我们知道copy的意思的将一份内容复制一份,首先我们看下下面这段代码:

1 import copy
2 list = ["name",["account",100]] #定义一个列表模板
3 helen = copy.copy(list)      #将列表list的数据复制一份给helen 此时helen的数据为["name",["account",100]]
4 helen_wife = copy.copy(list) #将列表list的数据复制一份给helen_wife 此时helen的数据为["name",["account",100]]
5 helen[0] = "helen"
6 helen_wife[0] = "helen_wife"
7 print  helen   #执行结果为['helen', ['account', 100]]
8 print  helen_wife #执行结果为['helen_wife', ['account', 100]]

上面的代码描述如下:目前看起来还一切正常,符合咱们正常对copy的理解,这时候,我执行下面的操作:

1 helen[1][1] = 50

这句话的意思是,将helen的账号下面的金额修改为50,这时候我们思考一下,此时第7,8行代码将会输出怎样的结果?第7,8行执行的代码结果应该分别为:['helen', ['account', 50]]和['helen_wife', ['account', 100]]对吗?恭喜你,答错了,正确结果应该是['helen', ['account', 50]]和['helen_wife', ['account', 50]],纳尼????helen自己花了50块钱,为毛还要扣掉他媳妇账号里面的50块钱,我们很不理解,没关系,下面我们来看一个图。

其实我们在使用上面的copy方法的时候,计算机内存中是复制了一份同样大小的空间和值,而列表的存储方式是:对于多层级的列表都是存放的地址。而当我们修改age的值的时候,我们发现不管是通过helen去索引还是helen_wife去索引age的值都是一样的,也就是说对account和age的修改同时影响了helen和helen_wife,这不是我们想要的结果。对于这种方式的copy,我们称之为浅拷贝。如果我们要想实现完全拷贝的话,可以使用另一个方法copy.deepcopy()方法,这种完全拷贝的方式称为深拷贝

 切片:

    切片是python中一个很重要的操作,其字面意思是将一串内容进行分割。

1 list = ["jak","helen","alex","mark","Lilie"]
2 print  list[:]   #完全切片 执行结果['jak', 'helen', 'alex', 'mark', 'Lilie']
3 print  list[2:5] #从第下标为2的元素开始切割,到下标为5的元素结束,但不包括下标为5的元素(顾头不顾尾) 执行结果['alex', 'mark', 'Lilie']
4 print  list[:4]  #从下标为0的元素开始到下标为4的元素进行切片 执行结果['jak', 'helen', 'alex', 'mark']
5 print  list[1:] #从下标为1的元素开始到最后一个元素进行切片 执行结果['helen', 'alex', 'mark', 'Lilie']
6 print  list[2:5:2] #从下标为2的元素到下标为4的元素每隔一个进行切片,执行结果为['alex', 'Lilie']
7 print  list[1:5][2:6] #嵌套切片 执行结果['mark', 'Lilie']

上面的列子详细描述了列表的各种切片操作,值得注意的是,我们要关注嵌套切片的作用,当我们遇到一个比较复杂的问题时,如果我们一次切片无法完成,可以考虑嵌套切片。

元组:

  元组是python里另一种数据类型,但我们可以认为元组是一类特殊的列表,其特殊在元组里面的元素是不可以被更改的。元组的定义如下:

 

1 t = ("jak","helen","alex","mark","Lilie")
2 print  t   # 执行结果('jak', 'helen', 'alex', 'mark', 'Lilie')

 

由此,我们总结如下:

       1、元组是一类特殊的列表,元组的定义和列表的定义仅仅在于()和[ ]的区别

        2、元组的内容一旦被定义,就无法被更改

       3、元组的操作除了无法进行修改,其他的操作和列表是一模一样

所以,当我们执行这样一条语句时:

1 t = ("jak","helen","alex","mark","Lilie")
2 t[0] = "JAK"
3 print  t   

执行结果为:,其翻译成中文就是:元组对象不支持元素修改,所以我们学会了列表,很容易就掌握了元组。

OK,那么现在让我们看下面这样一段代码?执行会报错吗?

1 t = ("jak","helen","alex","mark","Lilie",["account",90])
2 t[5][1] = 1000
3 print  t

执行结果为:('jak', 'helen', 'alex', 'mark', 'Lilie', ['account', 1000]),思考为嘛呢!

posted @ 2018-01-12 13:21  高文祥888888  阅读(396)  评论(0编辑  收藏  举报