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内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们。

原文地址:https://www.cnblogs.com/pengpengzhang/p/8514444.html