Python3中的列表用法,看这一篇就够了
类似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.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.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.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.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 < list2
False 判断元素是否存在
in 和 not in,注意只能在当前维度进行判断
>>>infos
['Hello', 'world', [5.6, 'BUPT']]
>>>'Hello' in infos
True
>>>5.6 in infos
False
>>>5.6 in infos[2]
True
Python3中的列表用法,看这一篇就够了的更多相关文章
- Java中的多线程=你只要看这一篇就够了
如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...
- 关于 Docker 镜像的操作,看完这篇就够啦 !(下)
紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...
- 鸿蒙应用程序Ability(能力)看这一篇就够
本节概述 什么是Ability Ability分类 Ability生命周期 Ability之间跳转 什么是Ability Ability意为能力,是HarmonyOS应用程序提供的抽象功能.在Andr ...
- JVM内存模型你只要看这一篇就够了
JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...
- 【java编程】ServiceLoader使用看这一篇就够了
转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...
- [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...
- 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了
title author date CreateTime categories win10 uwp win2d 入门 看这一篇就够了 lindexi 2019-5-25 20:0:52 +0800 2 ...
- windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看
windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看 1. 新建excel表格 A B C D E 姓 名 全名 登录名 密码 李 四 李四 李四 test123!@ ...
- 什么是 DevOps?看这一篇就够了!
本文作者:Daniel Hu 个人主页:https://www.danielhu.cn/ 目录 一.前因 二.记忆 三.他们说-- 3.1.Atlassian 回答"什么是 DevOps?& ...
随机推荐
- Unity C# Sting.Format的学习
String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项. String.Format (String, Obj ...
- 个人整理的jsp、EL表达式、JSTL标签库的笔记,少概念多实用,需要的留下邮箱,会第一时间分享原稿PDF给大家!
jsp 第一章 jsp介绍及对比servlet 作用: 动态网页技术,动态的从数据库获取数据 jsp和servlet的优缺点: jsp优点:页面表现方便,利于写html代码 jsp缺点:业务逻辑处理麻 ...
- javascript之 JavaScript 工具库
javascript之 JavaScript 工具库jQuery 目录: 一.查找标签和事件绑定以及操作标签的对比 二.DOM对象和jquery的转换 三.$(document).ready( ) ...
- js 数组操作常用方法
push():在数组后面加入元素,并返回数组的长度: unshift():在数组前面就如元素,并返回数组的长度: pop():删除最后一个元素: var arr =[1,2,3,4,5] ; arr. ...
- thinkphp简易搜索
需求: 用户输入关键词,选项卡的每个选项输出一个分类的列表内容,分类有文章.ppt.学习. 实现过程: 视图中用户输入的关键词post给控制器,控制器对这个关键词做三次模糊查询处理,因为是三个分类对应 ...
- 使用visio创建数据库模型
使用软件:visio 2007 下载地址:https://pan.baidu.com/s/1i4LG1Id 主要参考:http://blog.csdn.net/zhang_xinxiu/article ...
- ionic 2 起航 控件的使用 客户列表场景(三)
我们来看看客户列表的搜索控件是怎么工作的吧. 1.打开customer.html <ion-content> <ion-searchbar [(ngModel)]="sea ...
- Hyper-V 2016 配置管理系列(应用篇)
远程连接到Hyper-V HOST 为了日常运维管理操作,使用远程PowerShell工作.Windows 10上安装了RSAT(远程管理工具 ).然后安装了Hyper-V控制台: 在能够远程连接到H ...
- HDU 4745 Two Rabbits (区间DP)
题意: 两只兔子,在一个由n块石头围成的环上跳跃,每块石头有一个权值ai.开始时两兔站在同一石头上(也算跳1次),一只从左往右跳,一只从右往左跳,两只同时跳,而每跳一次,两只兔子所站的石头的权值都要相 ...
- hihoCoder hiho一下 第十二周 #1055 : 刷油漆 (树上DP)
思路: 只能刷部分节点数m,总节点数n.如果m>=n那么就可以全刷了,那就不用任何算法了.如果m<n那么就要有取舍了.用DP思路,记录下每个节点如果获得到1~m个选择所能获得的最大权值.这 ...