概念: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的更多相关文章

  1. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  2. python第二章:数据类型--小白博客

    标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典) Python3 ...

  3. selenium webdriver (python) 第二版

    前言 对于大多软件测试人员来讲缺乏编程经验(指项目开发经验,大学的C 语言算很基础的编程知识)一直是难以逾越的鸿沟,并不是说测试比开发人员智商低,是国内的大多测试岗位是功能测试为主,在工作时间中,我们 ...

  4. python基础——使用list和tuple

    python基础——使用list和tuple list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用 ...

  5. Python之创建单元素tuple

    tuple和list一样,可以包含 0 个.1个和任意多个元素. 包含多个元素的 tuple,前面我们已经创建过了. 包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示: >& ...

  6. Python第二十四天 binascii模块

    Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...

  7. Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块

    Python第二十二天   stat模块  os.chmod方法  os.stat方法  pwd  grp模块 stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义,根据 ...

  8. Python第二十六天 python装饰器

    Python第二十六天 python装饰器 装饰器Python 2.4 开始提供了装饰器( decorator ),装饰器作为修改函数的一种便捷方式,为工程师编写程序提供了便利性和灵活性装饰器本质上就 ...

  9. Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助

    Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助 目录 Pychar ...

  10. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest): #1.打开两个文件:1个关联读操作,1个关联写操作 fr=open(src,'rb ...

随机推荐

  1. (贪心部分背包问题)Saving HDU HDU2111

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. python自动化开发-[第三天]-编码,函数,文件操作

    今日概要 - 编码详解 - 文件操作 - 初识函数 一.字符编码 1.代码执行过程 代码-->解释器翻译-->机器码-->执行 2.ASCII ASCII:一个Bytes代表一个字符 ...

  3. 剑指Offer_编程题_7

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 class Solution { public: int Fibonacci(int n) ...

  4. Scrapy Shell的使用

    Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据. 如果安装了 IPyth ...

  5. Linux记录-安装LAMP和R环境

    2.2 Apache httpd2.2.1 执行命令进行安装:yum install -y httpd2.2.2 开启服务:service httpd start2.2.3 设置开机自启动:chkco ...

  6. Git与GitHub学习笔记(六)使用 Github Pages 管理项目文档

    前言 你可能比较熟悉如何用 Github Pages 来分享你的工作,又或许你看过一堂教你建立你的第一个 Github Pages 网站的教程.近期 Github Pages 的改进使得从不同的数据源 ...

  7. 深入浅出mybatis之与spring集成

    目录 写在前面 详细配置 1.dataSource(数据源) 2.sqlSessionFactory(Session工厂) 3.Mapper(映射器) 4.TransactionManager(事务管 ...

  8. vertica系列:解锁table

    Vertica 表发生死锁后, 通过下面3个查询即可解锁. --步骤1: 找到被锁表的 transaction_idselect transaction_id, t.* from v_monitor. ...

  9. XOR 加密

    XOR 是一个神奇的运算符, 观察它的真值表, 很容易得到以下结论: 假设现有 a , b 变量, 则 a ^ 0 == a a ^ 0xff == ~a (取反加1等于作为补码的a的真值的相反数的补 ...

  10. [Java JNI] [Windows] [Visual Studio] [DLL] [UnsatisfiedLinkError]

    有时候使用 GCC for Windows 生成 DLL 动态链接库时, 由于各种原因, 即使加载了动态链接库, JVM 仍然找不到符号, 从而产生 java.lang.UnsatisfiedLink ...