Python3中的列表用法,看这一篇就够了

Stella981
• 阅读 679

类似C语言中的列表用法

--------------------------------------------------------------------------------------------------------------

创建:列表使用中括号表示,内部元素使用逗号隔开,元素的数据类型允许不一致,允许多层嵌套

names = [``'Tom'``,``"Lily"``,``'Eric'``]

infos = [``'Hello'``,``5``,``[5.6,'BYE']``]

访问:利用列表的[下标 ]访问单个元素,第一个元素的下标是0,依次加1;也可从最后一个元素访问,下标是-1,依次减1

若下标出界,则报错IndexError: list index out of range

>>> names[``0``]

'Tom'

>>> names[ 2 ]

'Eric'

>>> names[ - 1 ] #访问最后一个元素(倒数第一个元素)

'Eric'

>>> names[ - 2 #访问倒数第二个元素

'Lily'

>>> infos[ 2 ][1]  #访问多层列表

'BYE'

追加:在原有的列表末尾追加一个或者多个

 >>> names

['Tom', 'Lily', 'Eric']
>>> names.append("Rain") #在末尾添加一个元素使用append()
>>> names
['Tom', 'Lily', 'Eric', 'Rain']

>>> names.expend(['Peter', 'Amy']) #在末尾添加多个元素使用expend()

>>> names
['Tom', 'Lily', 'Eric', 'Rain','Peter', 'Amy']

切片:与访问单个元素不同的是,切片可一下子访问多个元素

>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4]  #取下标1至下标4之间的值,包括1,不包括4
['Lily', 'Eric', 'Rain']
>>> names[1:-1] #取下标1至-1的值,不包括-1
['Lily', 'Eric', 'Rain', 'Peter']
>>> names[0:3] #取开头到下标3之间的值,不包括3['Tom', 'Lily', 'Eric']

>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
['Tom', 'Lily', 'Eric']
>>> names[3:] #如果想取最后一个,不能写-1,只能这么写
['Rain', 'Peter', 'Amy']切片默认的步长为1,意思是下标值递增1取值;也可自行设置步长[start:end:步长]
>>> names[1:5:2] #取下标值为1,3 的值
['Lily', 'Rain']

>>> names[::2] #表示从开头的下标值开始加2取['Tom', 'Eric', 'Peter']

 插入,使用list.insert(位置,元素)将需要添加的元素插入到目标列表的下标位置处

>>> names

['Tom', 'Lily', 'Eric', 'Rain', 'Peter', 'Amy']

>>> names.insert(2,'p2')['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']>>> names.insert(0,'start')['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']>>> names.insert(-1,'end')#本意是插入到最后一个,但是结果不对['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'end', 'Amy']

修改:直接将元素重新赋值即可

>>> names ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'end', 'Amy']

>>>names[-2] = '该换人了'

['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '该换人了', 'Amy']

删除:有三种删除方法,del、remov()和pop(),示例如下

>>>names

['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '该换人了', 'Amy']1. del list[index] 用下标值index删除

>>> del names[0]['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '该换人了', 'Amy']>>> del names[6]['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']del names[]表示删除names列表2.list.remove(value)用元素值删除>>> names.remove('p2')['Tom', 'Lily', 'Eric', 'Rain', 'Peter', 'Amy']

3.list.pop(index) 用下标值index删除,若省略则删除最后一个元素

>>> names.pop()#不写下标值删除最后一个['Tom', 'Lily', 'Eric', 'Rain', 'Peter']>>>names.pop(1)['Tom', 'Eric', 'Rain', 'Peter']

统计:使用list.count(value)统计列表中元素值value出现的次数

>>> names2 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom',1,2,3]>>> names2.count('Tom')2

翻转:list.reverse()基于当前列表将元素排列顺序翻转(不生成新列表)

>>> names2 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom',1,2,3]>>> names2.reverse()[3, 2, 1, 'Tom', 'Tom2', '_Peter', '3Rain', 'Eric', 'Tom']

排序:list.sort()将列表元素值首字母的ASCII码或者数值升序(默认)或者降序排列

若有元素数据类型不一致会出现报错例如:TypeError: '<' not supported between instances of 'str' and 'int'

>>> names3 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom','1','2','3']>>> names3.sort()>>> names3['1', '2', '3', '3Rain', 'Eric', 'Tom', 'Tom', 'Tom2', '_Peter']

>>> nums = [1,2.6,3,56,89,-1]>>> nums.sort()>>> nums[-1, 1, 2.6, 3, 56, 89]也可使用list.sort(reverse = True)进行降序排列获取下标:list.index[value]返回列表中第一个元素值为value的下标

>>> names2[3, 2, 1, 'Tom', 'Tom2', '_Peter', '3Rain', 'Eric', 'Tom']>>> names2.index('Tom')3

复制列表

 1. 使用“=”直接复制出另一个列表,不过这两个列表指向同一个对象,改变任何一个列表的元素值均会影响另一个,包括一维、多维里的元素

>>>infos1 = infos>>>print(infos,infos1)['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]>>>infos[1] = 'world'>>>infos[2][1] = 'BUPT'>>>print(infos,infos1)['Hello', 'world', [5.6, 'BUPT']] ['Hello', 'world', [5.6, 'BUPT']]

 此方法并不是严格意义上的复制,只是新建了一个对象指向了原来的空间

2. 工厂函数,会改变多维元素,一维元素不改变

>>>infos2 = infos>>>print(infos,infos2)['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]>>>infos[1] = 'world'>>>infos[2][1] = 'BUPT'>>>print(infos,infos2)['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BUPT']]中间的列表是单独分配了一块空间,然后从第一层列表中去引用地址,复制的info2也是引用的地址,所以真实的值一变,两个列表的内部列表的值也就变了

3. 使用list.copy()进行浅复制

>>>infos3 = infos.copy()>>>print(infos,infos3)['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]>>>infos[1] = 'world'>>>infos[2][1] = 'BUPT'>>>print(infos,infos3)['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BUPT']]可见,此方法与方法2工厂函数复制的结果一样4.调用copy模块进行浅复制

>>>infos4 = copy.copy(infos)>>>print(infos,infos3)['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]>>>infos[1] = 'world'>>>infos[2][1] = 'BUPT'>>>print(infos,infos4)['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BUPT']]

可见,此方法与方法2工厂函数复制的结果一样

5.调用copy模块进行深复制

>>>infos5 = copy.deepcopy(infos)>>>print(infos,infos5)['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]>>>infos[1] = 'world'>>>infos[2][1] = 'BUPT'>>>print(infos,infos5)['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BYE']]由此可见,只有这种方法做到了完全复制出了另一个独立的列表小结:用=生成的列表只是指向了同一个空间,相当于同一个空间有两个列表名字而已浅复制实现有三种:工厂函数[:]、copy方法和调用copy模块浅复制,运行结果是第一维元素复制出来是独立的,第二维等多维元素列表公用了同一个空间完全独立复制就只能使用copy模块里的深复制了列表拼接与字符串类似,可以使用加号+进行拼接(注意不是元素值相加),使用乘号*复制自身若干次

>>>list1 = [1,2,3]>>>list2 = [1,3,5]>>>list3 = list1 + list2[1, 2, 3, 1, 3, 5]>>>list4 = list1*3[1, 2, 3, 1, 2, 3, 1, 2, 3]

当然,expan()方法也能实现,并且显得更为专业列表比大小默认从第一个元素开始比较其对应的ASCII码的大小,只要有一个pk赢了就代表整个列表赢了

>>>list1 < list2False判断元素是否存在

in 和 not in,注意只能在当前维度进行判断

>>>infos['Hello', 'world', [5.6, 'BUPT']]>>>'Hello' in infosTrue>>>5.6 in infosFalse>>>5.6 in infos[2]True
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Bill78 Bill78
3年前
Python 元组(Tuple)操作详解
Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可一、创建元组代码如下:tup1('physics','chemistry',1997,2000);tup2(1,2,3,4,5);tup3"a","
Stella981 Stella981
3年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这