python第二天,list和tuple
概念:list是集合,且是可变集合,tuple是元组集合,不可变集合。
1.Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
主要知识点:初始化集合 param = ['jerry',tom'','lily','lucy']; 根据下标查询指定位置内容 param[0];
比如,列出班里所有同学的名字,就可以用一个list表示:

变量classmates就是一个list。用len()函数可以获得list元素的个数

用索引来访问list中每一个位置的元素,记得索引是从0开始的:

当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1。

如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:

当然,如果越界,也会报错的。
list是一个可变的有序表,所以,可以往list中追加元素到末尾。通过.append()即可实现对数组的追加

也可以把元素插入到指定的位置,比如索引号为1的位置,这里主要通过.insert():

要删除list末尾的元素,用pop()方法,这个方法删除的是集合最后一个元素:

当需要删除指定位置的元素时,利用pop(i),输入该元素所在下标即可:

通过两次.pop()我们得出来一个答案,在利用.pop()删除数据的时候会先输出要删除的元素,这个时候,我们就要考虑以后是不是需要在用到这个元素,如果以后的过程中还需要用到这个元素那么我们就定义一个变量来接收这个值,方便以后用。例如:

那么如果我们以后都会在用到那个要删除的值是不是会有别的办法,答案是肯定的 可以通过del list[i]。这个删除将会直接删除元素的值,如图:

从中我们看出,使用del删除列表元素方法是要我们知道元素在列表中的具体位置,既索引。del + L[i]
使用del方法将元素从列表中删除之后,列表中就不存在这个值了,我们就无法在访问它了。
下面我们来试一下删除越界问题分别使用.pop(i)和del list[i],如图:

从结果中我们可以看出是索引出现了问题(IndexError),索引错误的原因是索引超界。因而在使用del删除的时候,一定是知道了元素的具体位置,然后进行删除,如果列表是空的肯定也会报错,不像insert()方法那样。因为.pop()、del是删除列表中的元素,索引值超过的时候这个元素在列表中根本就不存在因此不能够进行删除,系统会报错。
要牢记,当我们使用pop()方法时,被弹出的元素就不再列表中了。 如果不确定该使用del语句还是pop()方法,下面是一个简单的判断标准:如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句,如果你要在删除元素后还能继续使用它,就使用方法pop()。
有人就要问了,根据下标删除元素是比较好,但是有的时候只知道元素,并不知道他所在数组内的下标,那么python有没有提供方法?是的python为我们提供了一个根据元素进行删除的方法.remove(object),如图:

首先我们要明确,for循环内置计数器,首先我们从numbers列表中循环第一个元素,等于2,然后移除,然后从列表中循环numbers[1],此时numbers列表第二个元素是2,删除,然后运行numbers[2],由于在[5, 2, 5, 0, 99, 2, 2, 2]中numbers[2]是5,所以程序继续执行,但是没有删除元素,循环值numbers[3],numbers[3]是0,不满足,继续循环,numbers[4]是99,不满自继续执行,当到numbers[5]的时候,值为2,此时要删除列表中的2,可能很多人这里不明白,刚开始我也是这样,我们还记得remove()方法的属性吗?删除第一个遇到的值,此时5和5之间的2遭殃了,由于在最前面,所以删除的是这个2,而不是列表[5, 2, 5, 0, 99, 2, 2, 2]中numbers[5]位置的2,这点我们一定要基础。
总结:删除列表中元素的方法有del语句,pop()方法和remove()方法,如何使用这三种方法呢?首先,del语句是删除列表中指定的值,我们知道这个值的位置索引,然后删除这个值,del + L[],是我们知道了这个元素在列表中的具体位置,位置索引,然后进行的删除,而pop()方法如果没有制定参数的话默认是弹出最后一个参数,而且弹出的值可以再次使用,pop(0)可以每次弹出第一个元素的值,del + L[0]效果等同,而remove()方法适用于我们知道这个元素具体的值,知道要把某个具体的元素从列表中删除,删除的是具体的元素值,而不是索引的方式。remove(object),但是无论那种方法,我们一定要牢记,但把原列表中值删除的时候,原来列表的值必定发生了变化,长度也发生了变化,索引值发生了改变,删除元素的位置会被后面的元素补缺上。这点一定要记住,在使用删除的时候一定要选择正确的删除方式,避免发生不必要的错误。
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置,和java中数组的改变方式一致:

list里面的元素的数据类型也可以不同,比如:

当然,也可以插入一个数组:

我们想要取出apple,需要通过classmates[4][0]来获取,如图所示:

由此可以看出python也是支持二维数组、三维数组等多维度数组的。
----------------------------------------------------胜天半子分割线-----------------------------------------------------------------
tuple是有序列表叫元组。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:

现在,tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用students[0],students[-1],但不能赋值成另外的元素。
不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,想要再去更改该集合都是无济于事。

如果要定义一个空的tuple,可以写成():

但是,要定义一个只有1个元素的tuple,如果你这么定义:

定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。
最后来看一个“可变的”tuple:

首先定义了一个arr的list,并且在其中添加了两个元素,然后将这个list添加到arr这个元组里,这时元组的元素是不可以改变的,但是我们将arr中下表为0的元素改为mike时居然成功了,这是因为表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。
理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变
list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们。
python第二天,list和tuple的更多相关文章
- 简学Python第二章__巧学数据结构文件操作
#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...
- python第二章:数据类型--小白博客
标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典) Python3 ...
- selenium webdriver (python) 第二版
前言 对于大多软件测试人员来讲缺乏编程经验(指项目开发经验,大学的C 语言算很基础的编程知识)一直是难以逾越的鸿沟,并不是说测试比开发人员智商低,是国内的大多测试岗位是功能测试为主,在工作时间中,我们 ...
- python基础——使用list和tuple
python基础——使用list和tuple list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用 ...
- Python之创建单元素tuple
tuple和list一样,可以包含 0 个.1个和任意多个元素. 包含多个元素的 tuple,前面我们已经创建过了. 包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示: >& ...
- Python第二十四天 binascii模块
Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...
- Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块
Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块 stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义,根据 ...
- Python第二十六天 python装饰器
Python第二十六天 python装饰器 装饰器Python 2.4 开始提供了装饰器( decorator ),装饰器作为修改函数的一种便捷方式,为工程师编写程序提供了便利性和灵活性装饰器本质上就 ...
- Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助
Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助 目录 Pychar ...
- python第二十九课——文件读写(复制文件)
自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest): #1.打开两个文件:1个关联读操作,1个关联写操作 fr=open(src,'rb ...
随机推荐
- 列举一些 MacBook Pro 必需的外设和应用程序推荐
来源:知乎 文章收录于:风云社区SCOEE,提供上千款mac软件下载 基于从事Apps设计或开发者,使用 MacBook Pro,以下罗列一些必需的外设和应用程序推荐. Retina 256GB SS ...
- BZOJ4698 差分 + 二分 + SA
https://www.lydsy.com/JudgeOnline/problem.php?id=4698 题意:求N个字符串中最长的相同字串的长度,相同的定义是:两个子串长度相同且一个串的全部元素加 ...
- PL/SQL Developper导入导出数据库的方法及说明
导出步骤 1 tools ->export user object 选择选项,导出.sql文件. 2 tools ->export tables-> Oracle Export 选择 ...
- OracleDBconsoleorcl服务无法启动的原因及解决思路
被这个OracleDBconsole服务无法启动的问题折磨了两个星期了,今天很幸运,在网上无意间看到了一位大侠的思路,虽然错误的情况并不完全相同,但他的思路完全可以搬过来用.环境:Windows XP ...
- nginx的rewrite指令
需求:我们在接收到一个/api/upload 开头的url的时候 要转发到另外一个地址.但是又不想追加/api/upload 只想追加/upload 地址. Nginx提供了rewrite指令,用于 ...
- WebRequest/HttpWebRequest/HttpRequest/WebClient/HttpClient的区别
1.WebRequest和HttpWebRequest WebRequest 的命名空间是: System.Net ,它是HttpWebRequest的抽象父类(还有其他子类如FileWebReque ...
- Chrome DevTools: Export your raw Code Coverage Data
The Code Coverage tool visually shows you which lines of code in your CSS and JavaScript are used an ...
- 【leetcode-84】 柱状图中最大的矩形
(1pass,比较简单的hard) 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每 ...
- UVA - 1328 Period(循环节kmp)
https://vjudge.net/problem/UVA-1328 题意 求每个前缀的最小循环节,要求至少循环两次且为完整的. 分析 求next数组,i-next[i]即为前缀i的最小循环节,再判 ...
- Weex Ui - Weex Conf 2018 干货分享
本文是2018年 Weex Conf 中议题<Weex + Ui>的内容文档整理,主要给大家介绍飞猪 Weex 技术体系从无到有的过程,包括 Weex Ui 组件库的开发和发展,重点分享在 ...