list 根据某个数字所在位置_【Python学习笔记】09、使用list和tuple

a5834d8bbc312822b7864f1cd8d07a95.gif

list

Python内置的列表数据类型是:list。list是一种有序的集合,可以随时添加和删除其中的元素。如:

>>> classmates = ['Kuaie', 'Bob', 'Tracy']>>> classmates['Kuaie', 'Bob', 'Tracy']

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

>>> len(classmates)3

用索引来访问list中每一个位置的元素,索引是从0开始的,当索引超出了范围时,会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1

>>> classmates[0]'Kuaie'>>> classmates[1]'Bob'>>> classmates[3]Traceback (most recent call last):  File "", line 1, in <module>IndexError: list index out of range

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

>>> classmates[-1]'Tracy'

以此类推,可以获取倒数第2个、倒数第3个:

>>> classmates[-2]'Bob'>>> classmates[-3]'Kuaie'>>> classmates[-4]Traceback (most recent call last):  File "", line 1, in <module>IndexError: list index out of range

当然,倒数第4个就越界了。

list是一个可变的有序表,所以,可以往list中追加元素到末尾:

>>> classmates.append('Adam')>>> classmates['Kuaie', 'Bob', 'Tracy', 'Adam']

也可以把元素插入到指定的位置,比如索引号为1的位置:

>>> classmates.insert(1, 'Jack')>>> classmates['Kuaie', 'Jack', 'Bob', 'Tracy', 'Adam']

要删除list末尾的元素,用pop()方法,要删除指定位置的元素,用pop(i)方法,其中i是索引位置:

>>> classmates.pop()'Adam'>>> classmates['Kuaie', 'Jack', 'Bob', 'Tracy']>>> classmates.pop(1)'Jack'>>> classmates['Kuaie', 'Bob', 'Tracy']

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:

>>> classmates[1] = 'Sarah'>>> classmates['Kuaie', 'Sarah', 'Tracy']

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

>>> L = ['Apple', 123, True]

list元素也可以是另一个list,比如:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']>>> len(s)4

如果一个list中一个元素也没有,就是一个空的list,它的长度为0:

>>> L = []>>> len(L)0

tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:

>>> classmates = ('Kuaie', 'Bob', 'Tracy')

现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0]classmates[-1],但不能赋值成另外的元素。

不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:

>>> t = (1, 2)>>> t(1, 2)

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

>>> t = ()>>> t()

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

>>> t = (1)>>> t1

定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

>>> t = (1,)>>> t(1,)

Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。

最后来看一个“可变的”tuple:

>>> t = ('a', 'b', ['A', 'B'])>>> t[2][0] = 'X'>>> t[2][1] = 'Y'>>> t('a', 'b', ['X', 'Y'])

这个tuple定义的时候有3个元素,分别是'a''b'和一个list。不是说tuple一旦定义后就不可变了吗?怎么后来又变了?

别急,我们先看看定义的时候tuple包含的3个元素:

d3b63371ee1c763c657652ad8206a498.png

当我们把list的元素'A''B'修改为'X''Y'后,tuple变为:

55a7279cb0b000be98ee77001962faab.png

表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。

小结

list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们。

6104fcf6397a0df11898800f060ad5fd.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连接maven_如何在Eclipse中使用Maven工程连接远程的Spark

如何在Eclipse中使用Maven工程连接远程的Spark本地Spark跑不会出现什么问题&#xff0c;但是切换到服务器上各种问题。异常java.lang.ClassCastException: cannot assign instance of java.lang.invoke.SerializedLambda to fieldorg.apache.spark.api.java.JavaRDDLike$$anonf…

FastJSON的依赖

<!-- 添加 FastJSON依赖 --> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.59</version> </dependency>

莫队模板

莫队的模板&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 嘿嘿嘿 #include<bits/stdc.h> using namespace std; const int maxn 1000005; inline int read() {int x0,f1;char chgetchar();while(ch>9||ch<0){if(ch-)f-1;chgetchar();}while(ch&g…

计算机系统基础:文件的存取和存储空间管理知识笔记

1、文件的存取 文件的存取实际上就是针对文件存储器上物理块的读写操作。存取方法主要有顺序存储、随机存储两种。 2、文件存储空间管理 磁盘分配表&#xff1a;外存空闲空间管理的数据结构。 2.1 空闲空间管理方法 1、空闲区表 将外存空间的一个连续未分配的区域称为空闲区。操…

语言筛选法选素数怎么解决输出超限_论文深耕 | 什么时候才能把文献看完?——论文的正确筛选、阅读顺序...

Hello!这是你与「大学生科研竞赛」的第 50 次相遇。搞科研免不了要看文献&#xff0c;一提到看文献就有很多人头疼&#xff0c;“那么多文献什么时候才能看完啊&#xff1f;”01筛选论文这个时候就需要我们对文献有一个筛选&#xff0c;筛选的办法也很简单&#xff1a;1标题首先…

ft2232驱动安装方法_ST-Link资料03_ST-Link固件升级、驱动下载安装方法

说明&#xff1a;本文原创作者『strongerHuang』本文首发于微信公众号『嵌入式专栏』&#xff0c;同时也更新在我的个人网站&#xff1a;EmbeddedDevelop一、写在前面前两篇文章讲述的都是关于ST-Link的一些理论知识&#xff0c;建议初学者看看&#xff1a;ST-Link资料01_ST-Li…

Java 泛形通配符 ?

Class<Integer> cla;与Class<?> cl; 前一个表示baicla只能指向Integer这种类型&#xff0c;而后一个cl表示可以du指向任意类型。 cla Integer.class 可以&#xff0c;但cla Double.class就不可zhi以。 但是cl Integer.class 可以&#xff0c;cl Double.class也…

操作系统基础:计算机作业管理知识笔记

1、计算机作业的概念计算机中的作业是为了完成某个用户的计算任务所做工作的总和。作业管理程序&#xff1a;操作系统中用来控制作业进入、执行、撤销的一组程序。2、作业与作业的控制方式脱机控制方式&#xff1a;用户需要把自己需要计算机完成的任务用作业控制语言编写成作业…

easyui的验证

多重验证&#xff1a; Js代码 { field : startPort, title : "起始端口", editor: "text", width : 50, editor: { …

403 forbidden_[SpringSecurity] 自定义403页面

使用 Spring Security 时经常会看见 403&#xff08;无权限&#xff09;&#xff0c;默认情况下 显示的效果如下&#xff1a;而在实际项目中可能都是一个异步请求&#xff0c;显示上述效果对于用户 就不是特别友好了。Spring Security 支持自定义权限受限。具体做法1.新建一个类…

大疆口袋相机美颜怎么设置_灵眸Osmo口袋云台相机评测-大疆灵眸云相机使用说明...

大疆正式发布灵眸Osmo口袋云台相机&#xff0c;机身小巧&#xff0c;便于随身携带&#xff0c;可拍摄4K/60fps超清影像&#xff0c;配备了独立屏幕&#xff0c;可爱的小巧机身对女性用户更加合适。据说这款产品 DJI 憋了一年多才正式发布&#xff0c;本期9号小编就带大家一起来…

java判断当前时间距离第二天凌晨的秒数

/*** 判断当前时间距离第二天凌晨的秒数** return 返回值单位为[s:秒]*/public Long getSecondsNextEarlyMorning() {Calendar cal Calendar.getInstance();cal.add(Calendar.DAY_OF_YEAR, 1);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.SECOND, 0);cal.set(Calendar…

硬件基础:嵌入式软件可靠性设计要注意的问题

自从40多年前嵌入式系统诞生以来&#xff0c;随着技术的发展和需求的变化&#xff0c;嵌入式系统软件就在嵌入式系统中越来越重要。现在&#xff0c;甚至一些嵌入式系统硬件一模一样&#xff0c;仅仅是软件不同&#xff0c;就是不一样的产品&#xff08;如交换机和路由器&#…

jdk1.6 改 jdk1.7或jdk1.8(改回也可以)(图文详解)

不多说&#xff0c;直接上干货&#xff01; 第一步&#xff1a;设置默认使用的JDK和JRE环境 具体步骤&#xff1a;菜单window->preferences->java->Installed JRES 点中了&#xff0c;右边的窗口点Add按钮 记住选择添加安装了Java目录下的Jdk目录&#xff0c;而不是Jr…

python替换所有标点符号 正则_python 把标点符号替换为空

Python str.replace(old, new[, max]) 方法把字符串str中的 old&#xff08;旧字符串&#xff09; 替换成 new(新字符串)&#xff0c;如果指定第三个参数max&#xff0c;则替换不超过 max 次。 如果非要用replace()函数来实现要这样写&#xff1a; import string m l forc inst…

无法打开“XXXX”,因为Apple无法检查其是否包含恶意软件。怎么解决?

今天在安装navicat的时候&#xff0c;因为apple无法检查其是否包含恶意软件&#xff0c;大概是如下图所示&#xff1a; 仔细查询过后才发现&#xff0c;只需要在Mac上设置下即可&#xff0c;具体方法如下&#xff1a; 打开Mac自带的软件「终端」&#xff08;一般在“其它”这个…

vue路由跳转子组件_vue-router之路由钩子(组件内路由钩子必须在路由组件调用,子组件没用)...

模式vue-router中的模式选项主要在router实例化的时候进行定义的&#xff0c;如下const router new VueRouter({mode: ‘history‘, // 两种类型history 还有 hashroutes: routes // 可以缩写成routes})有两种模式可供选择&#xff0c;history 和 hash&#xff0c;大致对比一下…

计算机网络基础概念知识笔记

1、计算机网络的发展阶段 1.1、具有通信功能的单机系统 该阶段的模式为终端-计算机网络&#xff0c;属于早期计算机网络的主要形式。它将一台计算机经过通信线路和若干个终端直接相连 1.2 具有通信功能的多机系统 针对单机系统的改进&#xff0c;在主计算机的外围增加了一台计算…

python模块下载失败_python 安装tushare模块出错的一个解决方法

&#xff08;写于20200519&#xff09; Tushare金融大数据社区 免费提供各类金融数据和区块链数据。我学python的动力之一就是使用金融数据进行量化投资。 原以为安装thshare是很容易的事&#xff0c;在cmd窗口输入pip install tushare后&#xff0c;似乎安装没报错&#xff0c…

winform中键盘和鼠标事件的捕捉和重写(转)

在 编写winform应用程序时&#xff0c;有时需要无论在哪个控件获取焦点时&#xff0c;对某一个键盘输入或者鼠标事件都进行同样的操作。比如编写一个处理图片的应用程序时&#xff0c; 希望无论当前哪个控件获得焦点&#xff0c;当用户按上、下、左、右键时&#xff0c;图片控件…