摘要:本文主要介绍了python中列表的内容。
1、列表的基本使用
- 列表的基本使用很类似于c语言中的数组,只不过它使用起来更加的方便。由于python是一种弱类型的语言,所以在一个列表中可以同时含有整数、浮点数、字符串。取出每一个元素时,就像c语言中一样,通过下标即可完成。例如:
1 >>> sam=['abc',125,'hello',3.14] 2 >>> sam 3 ['abc', 125, 'hello', 3.14] 4 >>> sam[0] 5 'abc'
- 列表相比c语言中的数组更加强大,它甚至可以在列表中包含一个列表,例如:
1 >>> bbs=['abc',['hj',789,3.14],90,89.99] 2 >>> bbs 3 ['abc', ['hj', 789, 3.14], 90, 89.99] 4 >>> bbs[2] 5 90 6 >>> bbs[1] 7 ['hj', 789, 3.14]
- 在进行下标取值时,还可以用负数来进行逆序的方法,例如:
1 >>> pps=['hda',90,9.89,'dgja'] 2 >>> pps 3 ['hda', 90, 9.89, 'dgja'] 4 >>> pps[-1] 5 'dgja'
- 在列表中还可以使用切片的方法获取子列表:
1 >>> spam=['abc','yui','aghs','agshyd'] 2 >>> spam[:] 3 ['abc', 'yui', 'aghs', 'agshyd'] 4 >>> spam[1:3] 5 ['yui', 'aghs'] 6 >>> spam[1:-1] 7 ['yui', 'aghs']
2、求长度、连接复制、删除、查找、多重赋值操作
- 求取长度可以直接借助len( )函数
1 >>> pam=['abc','yui','aghs','agshyd'] 2 >>> len(pam) 3 4
- 连接复制可以直接采取+和*来完成
1 >>> buf=[1,2,3] 2 >>> buff=['a','b','c'] 3 >>> buffadd=buf+buff 4 >>> buffadd 5 [1, 2, 3, 'a', 'b', 'c'] 6 >>> buffmul=buf*3 7 >>> buffmul 8 [1, 2, 3, 1, 2, 3, 1, 2, 3]
- 直接可以用del来对列表的元素进行删除
1 >>> qwe=['a','b','c'] 2 >>> del qwe[1] 3 >>> qwe 4 ['a', 'c']
- 可以直接用in和not in来判断一个元素是否在列表中
1 >>> fun=['dhs','abc',12,'da','uai'] 2 >>> 'abc' in fun 3 True 4 >>> 'qew' in fun 5 False
- 如果想将一个列表中的值赋值给一些变量,如果列表中元素的个数和变量的个数相同,那么就可以直接采用下面这样的简单的方式来进行:
1 >>> buff=['abc','def','tyu'] 2 >>> a,b,c=buff 3 >>> a+b+c 4 'abcdeftyu'
3、列表类中的方法
在python中,列表在本质上就是一个类,其中包含了很多处理实例对象的方法,现在主要介绍这些方法:
- 查找值操作:index(),参数为要查找的值
语法:调用该方法,如果该值存在,返回位置信息,不存在返回错误。
- 插值操作:append()和insert()
语法:append()有一个参数,就是在列表的最后添加一个元素
insert()有两个参数,第一个参数是插值的位置,后面一个参数是要插入的值
- 删除操作:remove()
注意区分和del的区别,remove是类下的一个函数,而del是一个删除的指令
语法:remove()只有一个参数,就是要删除的元素
- 排序操作:sort()
语法:
- 默认参数下,直接调用这种方法。如果是数字,那么从小到大排序,如果是字符串,那么按照字符串的首字母的ASCLL码先后顺序进行排列
- 如果参数是reverse=True,那么就是进行逆序排列
注意:对于数字和字母混合在一起的列表是无法进行排序的
4、列表和字符串
学到此处,有一个问题,在c语言中,字符串其实是一种特殊的数组,那么在python中两者有区别吗?
答案是有的,下面进行具体的讲解:
首先,我们可以通过最简单的方法对字符串进行操作:
1 >>> qwe='abcd' 2 >>> qwe[1] 3 'b'
这样的操作在列表中也是完全合法的,但是列表却要比字符串的操作强大很多:列表的数据是可以改变的,但是字符串却不可以:
1 >>> fun='i am chinese' 2 >>> fun[0]=you #操作报错 3 Traceback (most recent call last): 4 File "<pyshell#11>", line 1, in <module> 5 fun[0]=you 6 NameError: name 'you' is not defined 7 >>> newfun='you '+fun[2:len(fun)] 8 >>> newfun 9 'you am chinese'
另外,还可以通过list()和tuple()这两个函数来实现对参数的类型转换。例如:
1 >>> tuple(['asd','qwe']) 2 ('asd', 'qwe') 3 >>> list(('asd', 'qwe')) 4 ['asd', 'qwe'] 5 >>> list('asdfg') 6 ['a', 's', 'd', 'f', 'g'] 7 >>> tuple(('asdfg')) 8 ('a', 's', 'd', 'f', 'g')
5、列表中的引用
我们一定要了解这样一个事实:列表的名称并不是列表本身,而是一个列表的引用。例如现在有一个列表Sam=['qwe',123],Sam在这里就是一个列表的引用,真正的列表和引用通过一个ID号来进行联系,当进行操作“Bam=Sam”时,那么就产生了两个引用(同一个ID)指向了同一个列表的事情,当列表的内容发生改变时,那么两个引用的内容自然也就发生了改变。实验如下:
1 >>> Sam=['qwe',123] 2 >>> Bam=Sam 3 >>> Sam[1]='asd' 4 >>> Sam 5 ['qwe', 'asd'] 6 >>> Bam 7 ['qwe', 'asd'] 8 >>> id(Sam) 9 50147208 10 >>> id(Bam) 11 50147208
但是在变量赋值的情况中却不会如此:
1 >>> a=12 2 >>> b=a 3 >>> id(a) 4 8791474689408 5 >>> id(b) 6 8791474689408 7 >>> a=13 8 >>> b 9 12
6、copy模块
copy模块下有copy()和deepcopy()两种复制的方法,下面进行进一步的探究:
1 >>> import copy 2 >>> spam=['a','b','c'] 3 >>> bam=copy.copy(spam) 4 >>> id(spam) 5 51938952 6 >>> id(bam) 7 47246152
可以看到,在copy模式中,复制是完全创建了一个新的列表。这里不再展示,deepcopy模式也是完全复制,只不过deepcopy的复制是针对含有列表的列表。