深入了解python列表(LIST)
Python内置的四种常用数据结构:列表(list)、元组(tuple)、字典(dict)以及集合(set)。
这四种数据结构一但都可用于保存多个数据项,这对于编程而言是非常重要的,因为程序不仅需要使用单个变量来保存数据,还需要使用多种数据结构来保存大量数据,而列表、元组、字典和集合就可满足保存大量数据的需求。
列表(list)和元组(tuple)比较相似,它们都按顺序保存元素,每个元素都有自己的索引,因此列表和元组都可通过索引访问元素。二者的区别在于元组是不可修改的,但列表是可修改的。
字典(dict)和集合(set)类似,它们存储的数据都是无序的,其中字典是用key-value的形式保存数据
python序列详解
所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。
无论是采用正索引值,还是负索引值,都可以访问序列中的任何元素。
注意,在使用负值作为列序中各元素的索引值时,是从-1开始,而不是从0开始。
[root@kubelist]#catdemo1.py str="Py序列化详解" print(str[0],"---",str[-6]) print(str[5],"---",str[-1]) [root@kubelist]#pydemo1.py P---y 详---解 [root@kubelist]#
序列切片
切片操作是访问序列中元素的另一种方法,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列。
序列实现切片操作的语法格式如下:
sname[start:end:step]
其中,各个参数的含义分别是:
sname:表示序列的名称;
start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为0,也就是从序列的开头进行切片;
end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;
step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果step的值大于1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置step的值,则最后一个冒号就可以省略。
[root@kubelist]#catdemo2.py str="py序列切片" print(str[:0])#end为0表示结束索引位置但是不包括该位置,因此为空 print(str[:1]) print(str[:2]) print(str[1:2]) num="123456789" print(num[1:5:2])#在1-5的区间中隔两位取一个值 [root@kubelist]#pydemo2.py p py y 24 [root@kubelist]#
序列相加
Python中,支持两种类型相同的序列使用“+”运算符做相加操作,它会将两个序列进行连接,但不会去除重复的元素。
里所说的“类型相同”,指的是“+”运算符的两侧序列要么都是序列类型,要么都是元组类型,要么都是字符串。
root@kubelist]#catdemo3.py print("你好"+"我好"+"dajiahao") [root@kubelist]#pydemo3.py 你好我好dajiahao [root@kubelist]#
序列相乘
Python中,使用数字n乘以一个序列会生成新的序列,其内容为原来序列被重复n次的结果
[root@kubelist]#catdemo3.py str="你好"+"我好"+"dajiahao" print(str*3) [root@kubelist]#pydemo3.py 你好我好dajiahao你好我好dajiahao你好我好dajiahao [root@kubelist]#
检查元素是否包含在序列中
Python中,可以使用in关键字检查某元素是否为序列的成员,其语法格式为:
valueinsequence
和in关键字用法相同,但功能恰好相反的,还有notin关键字,它用法检查某个元素是否不包含在指定的序列中
valuenotinsequence
[root@kubelist]#catdemo4.py #coding:utf-8 str="test.com.cn" print('e'instr) print('e'notinstr) [root@kubelist]#pydemo4.py True False [root@kubelist]#
和序列相关的内置函数
Python提供了几个内置函数(表3所示),可用于实现与序列相关的一些常用操作
[root@kubelist]#catdemo5.py str="test.com.cn" print(max(str)) print(min(str)) print(len(str)) print(list(str)) [root@kubelist]#pydemo5.py t . 11 ['t','e','s','t','.','c','o','m','.','c','n'] [root@kubelist]#
pythonlist列表
Python中没有数组,但是加入了更加强大的列表。如果把数组看做是一个集装箱,那么Python的列表就是一个工厂的仓库。
从形式上看,列表会将所有元素都放在一对中括号[]中,相邻元素之间用逗号分隔,格式中,element1~elementn表示列表中的元素,个数没有限制,只要是Python支持的数据类型就可以。如下所示
[element1,element2,element3,...,elementn]
[root@kubelist]#catdemo6.py lt=['c.test.com',1,[2,3],2.34,'aa'] print(lt) print(type(lt)) [root@kubelist]#pydemo6.py ['c.test.com',1,[2,3],2.34,'aa'][root@kubelist]#
创建列表
[root@kubelist]#catdemo7.py lt=[1,'x.test.com',[2,3]]#=号赋值使用[]括起来 str="1234test" print(type(lt)) print(type(str)) lt2=list(str)#使用list()函数转换 print(lt2) print(type(lt2)) [root@kubelist]#pydemo7.py['1','2','3','4','t','e','s','t'] [root@kubelist]#
python 访问和删除列表
[root@kubelist]#catdemo8.py vol=[1,'test.com',[3,4,5],44,'fff','ee'] print(vol[:1]) print(vol[:2]) print(vol[2:4]) delvol print(vol) [root@kubelist]#pydemo8.py [1] [1,'test.com'] [[3,4,5],44] Traceback(mostrecentcalllast): File"demo8.py",line6,inprint(vol) NameError:name'vol'isnotdefined [root@kubelist]#
pythonlist列表添加元素的三种方法
append()方法用于在列表的末尾追加元素,该方法的语法格式如下:
listname.append(obj)
当然,如果希望不将被追加的列表或元组当成一个整体,而是只追加列表中的元素,则可使用列表提供的extend()方法。extend()方法的语法格式如下:
listname.extend(obj)
如果希望在列表中间增加元素,则可使用列表的insert()方法,此方法的语法格式为:
listname.insert(index,obj)
其中,index参数指的是将元素插入到列表中指定位置处的索引值。
使用insert()方法向列表中插入元素,和append()方法一样,无论插入的对象是列表还是元组,都只会将其整体视为一个元素。
[root@kubelist]#catdemo9.py a_list=['test.com.cn',2,[2,'a']] a_list.append('b') print(a_list) a_list.extend([9,8,7]) print(a_list) a_list.insert(4,'MM') print(a_list) [root@kubelist]#pydemo9.py ['test.com.cn',2,[2,'a'],'b'] ['test.com.cn',2,[2,'a'],'b',9,8,7] ['test.com.cn',2,[2,'a'],'b','MM',9,8,7] [root@kubelist]#
pythonlist列表删除元素的三种方法
在列表中删除元素,主要分为以下3种应用场景:
1 根据目标元素所在位置的索引值进行删除,可使用del语句;
2 根据元素的值进行删除,可使用列表(list类型)提供的remove()方法;
3 将列表中所有元素全部删除,可使用列表(list类型)提供的clear()方法。
pythonlist修改元素
列表的元素相当于变量,因此程序可以对列表的元素赋值,这样即可修改列表的元素
slice分片同样可以使用
[root@kubelist]#catdemo11.py a_list=list(range(0,10))#list()函数转换为列表 print(a_list) a_list[2]='a'#替换序列为2的值 print(a_list) a_list[-1]='ffff'#替换序列为-1的值 print(a_list) a_list[3:4]=['s','d']#替换分片3-4的值 print(a_list) a_list[4:6]=[]#把4-6的值替换为空 print(a_list) a_list[1:3]='test'#对列表使用slice语法赋值时,不能使用单个值;如果使用字符串赋值,Python 会自动把字符串当成序列处理,其中每个字符都是一个元素。 print(a_list) a_list[2:6:2]=['MM','NN']#在使用slice语法赋值时,也可指定step参数。但如果指定了step参数,则要求所赋值的列表元素个数与所替换的列表元素个数相等 print(a_list) [root@kubelist]#pydemo11.py [0,1,2,3,4,5,6,7,8,9] [0,1,'a',3,4,5,6,7,8,9] [0,1,'a',3,4,5,6,7,8,'ffff'] [0,1,'a','s','d',4,5,6,7,8,'ffff'] [0,1,'a','s',5,6,7,8,'ffff'] [0,'t','e','s','t','s',5,6,7,8,'ffff'] [0,'t','MM','s','NN','s',5,6,7,8,'ffff'] [root@kubelist]#
pythonlist常用方法
除前面的增加元素、删除元素、修改元素方法之外,列表还包含了一些常用的方法。
count()方法,此方法用于统计列表中某个元素出现的次数
listname.count(obj)
index()方法用于定位某个元素在列表中出现的位置(也就是索引),如果该元素没有出现,则会引发ValueError错误。此方法的基本语法格式为
listname.index(obj,start,end)
同count()方法不同,index()方法还可传入start、end参数,用于在列表的指定范围内搜索元素。
pop()方法会移除列表中指定索引处的元素,如果不指定,默认会移除列表中最后一个元素。该方法的基本语法格式为:
listname.pop(index)
reverse()方法会将列表中所有元素反向存放。该方法的基本语法格式为:
listname.reverse()
sort()方法用于对列表元素进行排序,排序后原列表中的元素顺序会方发生改变。sort()方法的语法格式如下:
listname.sort(key=None,reserse=False)
可以看到,和其他方法不同,此方法中多了2个参数,它们的作用分别是:
key参数用于指定从每个元素中提取一个用于比较的键。例如,使用此方法时设置key=str.lower表示在排序时不区分字母大小写。
reverse参数用于设置是否需要反转排序,默认False表示从小到大排序;如果将该参数设为True,将会改为从大到小排序。
下面代码示范了使用列表作为“栈”的示例:
stack=[] #向栈中“入栈”3个元素 stack.append("fkit") stack.append("crazyit") stack.append("Charlie") print(stack)#['fkit','crazyit','Charlie'] #第一次出栈:最后入栈的元素被移出栈 print(stack.pop()) print(stack)#['fkit','crazyit'] #再次出栈 print(stack.pop()) print(stack)#['fkit']
pythonrange快速初始化数字列表
ythonrange()函数能够轻松地生成一系列的数字。例如,可以像如下这样使用range()来打印一系列数字:
[root@kubelist]#catdemo14.py #coding:utf-8 seq=[] foriinrange(1,4):#求1-3的乘积 vol=i**2 seq.append(vol) print(seq) print('----------------------------') print(type([1,2,3,4]))#range的type类型的转化 print(type(range(1,5))) [root@kubelist]#pydemo14.py [1,4,9] ----------------------------[root@kubelist]#
pythonlist列表实现栈和队列
队列和栈是两种数据结构,其内部都是按照固定顺序来存放变量的,二者的区别在于对数据的存取顺序:
队列是,先存入的数据最先取出,即“先进先出”。
栈是,最后存入的数据最先取出,即“后进先出”。
考虑到list类型数据本身的存放就是有顺序的,而且内部元素又可以是各不相同的类型,非常适合用于队列和栈的实现。本节将演示如何使用list类型变量来实现队列和栈。
pythonlist列表实现
使用list列表模拟队列功能的实现方法是,定义一个list变量,存入数据时使用insert()方法,设置其第一个参数为0,即表示每次都从最前面插入数据;读取数据时,使用pop()方法,即将队列的最后一个元素弹出。
[root@kubelist]#catdemo15.py #coding:utf-8 #定义一个空列表,当做队列 queue=[] #向列表中插入元素 queue.insert(0,"one") queue.insert(0,"two") queue.insert(0,"three") print(queue) print('取第一个元素:',queue.pop())#pop()默认取队列最后一位 print('取第二个元素:',queue.pop()) print('取第三个元素:',queue.pop()) [root@kubelist]#pydemo15.py ['three','two','one'] 取第一个元素:one 取第二个元素:two 取第三个元素:three [root@kubelist]#
python 实现栈
使用list列表模拟栈功能的实现方法是,使用append()方法存入数据;使用pop()方法读取数据。append()方法向list中存入数据时,每次都在最后面添加数据,这和前面程序中的insert()方法正好相反。
[root@kubelist]#catdemo16.py #coding:utf-8 #定义一个list当栈 stack=[] stack.append('one') stack.append('two') stack.append('three') print(stack) print('取第一个元素:',stack.pop()) print('取第二个元素:',stack.pop()) print('取第三个元素:',stack.pop()) [root@kubelist]#pydemo16.py ['one','two','three'] 取第一个元素:three 取第二个元素:two 取第三个元素:one [root@kubelist]#
collections模块实现栈和队列
queueAndStack=deque() queueAndStack.append(1) queueAndStack.append(2) queueAndStack.append("hello") print(list(queueAndStack)) #实现队列功能,从队列中取一个元素,根据先进先出原则,这里应输出1 print(queueAndStack.popleft()) #实现栈功能,从栈里取一个元素,根据后进先出原则,这里应输出hello print(queueAndStack.pop()) #再次打印列表 print(list(queueAndStack))
以上就是深入了解python列表(LIST)的详细内容,更多关于Python(list)的资料请关注毛票票其它相关文章!