第2章 Python序列

上传人:赵****学 文档编号:145594217 上传时间:2020-09-22 格式:PPT 页数:136 大小:880KB
返回 下载 相关 举报
第2章 Python序列_第1页
第1页 / 共136页
第2章 Python序列_第2页
第2页 / 共136页
第2章 Python序列_第3页
第3页 / 共136页
第2章 Python序列_第4页
第4页 / 共136页
第2章 Python序列_第5页
第5页 / 共136页
点击查看更多>>
资源描述

《第2章 Python序列》由会员分享,可在线阅读,更多相关《第2章 Python序列(136页珍藏版)》请在金锄头文库上搜索。

1、第2章 Python序列,Python序列概述,Python序列类似于其他语言中的数组,但功能要强大很多。 Python中常用的序列结构有列表、元组、字符串,字典、集合以及range等对象也支持很多类似的操作。 列表、元组、字符串支持双向索引,第一个元素下标为0,第二个元素下标为1,以此类推;最后一个元素下标为-1,倒数第二个元素下标为-2,以此类推。,2.1 列表,列表是Python中内置有序可变序列,列表的所有元素放在一对中括号“”中,并使用逗号分隔开; 当列表元素增加或删除时,列表对象自动进行扩展或收缩内存,保证元素之间没有缝隙; 在Python中,一个列表中的数据类型可以各不相同,可以

2、同时分别为整数、实数、字符串等基本类型,甚至是列表、元组、字典、集合以及其他自定义类型的对象。 10, 20, 30, 40 crunchy frog, ram bladder, lark vomit spam, 2.0, 5, 10, 20 file1, 200,7, file2, 260,9,列表常用方法,2.1 列表,2.1.1 列表创建与删除,使用“=”直接将一个列表赋值给变量即可创建列表对象 a_list = a, b, mpilgrim, z, example a_list = #创建空列表 也可以使用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转

3、换为列表。 a_list = list(3,5,7,9,11) a_list 3, 5, 7, 9, 11 list(range(1,10,2) 1, 3, 5, 7, 9 list(hello world) h, e, l, l, o, , w, o, r, l, d x = list() #创建空列表,2.1.1 列表创建与删除,当不再使用时,使用del命令删除整个列表,如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。 del a_list a_list Traceback (most recent call last): File , line 1, in a_li

4、st NameError: name a_list is not defined,2.1.2 列表元素的增加,(1)可以使用“+”运算符将元素添加到列表中。 aList = 3,4,5 aList = aList + 7 aList 3, 4, 5, 7 严格意义上来讲,这并不是真的为列表添加元素,而是创建一个新列表,并将原列表中的元素和新元素依次复制到新列表的内存空间。由于涉及大量元素的复制,该操作速度较慢,在涉及大量元素添加时不建议使用该方法。,2.1.2 列表元素的增加,(2)使用列表对象的append()方法,原地修改列表,是真正意义上的在列表尾部添加元素,速度较快。 aList.ap

5、pend(9) aList 3, 4, 5, 7, 9 所谓“原地”,是指不改变列表在内存中的首地址。,2.1.2 列表元素的增加,下面的代码比较了“+”和append()这两种方法的速度差异: import time result = start = time.time() for i in range(10000): result = result + i print(len(result), , time.time()-start) result = start = time.time() for i in range(10000): result.append(i) print(len

6、(result), , time.time()-start),2.1.2 列表元素的增加,在上面的代码中,分别重复执行10000次“+”运算和append()方法为列表插入元素并比较这两种方法的运行时间。在代码中,使用time模块的time()函数返回当前时间,然后运行代码之后计算时间差。 10000 , 0.21801209449768066 10000 , 0.003000020980834961,2.1.2 列表元素的增加,Python采用的是基于值的自动内存管理方式,当为对象修改值时,并不是真的直接修改变量的值,而是使变量指向新的值,这对于Python所有类型的变量都是一样的。 a =

7、 1,2,3 id(a) #返回对象的内存地址 20230752 a = 1,2 id(a) 20338208,2.1.2 列表元素的增加,列表中包含的是元素值的引用,而不是直接包含元素值。如果是直接修改序列变量的值,则与Python普通变量的情况是一样的,而如果是通过下标来修改序列中元素的值或通过可变序列对象自身提供的方法来增加和删除元素时,序列对象在内存中的起始地址是不变的,仅仅是被改变值的元素地址发生变化,也就是所谓的“原地操作”。,2.1.2 列表元素的增加, a = 1,2,4 b = 1,2,3 a = b False id(a) = id(b) False id(a0) = id

8、(b0) True a = 1,2,3 id(a) 25289752 a.append(4) id(a) 25289752, a.remove(3) a 1, 2, 4 id(a) 25289752 a0 = 5 a 5, 2, 4 id(a) 25289752,2.1.2 列表元素的增加,(3)使用列表对象的extend()方法可以将另一个迭代对象的所有元素添加至该列表对象尾部。通过extend()方法来增加列表元素也不改变其内存首地址,属于原地操作。 a.extend(7,8,9) a 5, 2, 4, 7, 8, 9 aList.extend(11,13) aList 3, 4, 5,

9、7, 9, 11, 13 aList.extend(15,17) aList 3, 4, 5, 7, 9, 11, 13, 15, 17 id(a) 25289752,2.1.2 列表元素的增加,(4)使用列表对象的insert()方法将元素添加至列表的指定位置。 aList.insert(3, 6) #在下标为3的位置插入元素6 aList 3, 4, 5, 6, 7, 9, 11, 13, 15, 17,2.1.2 列表元素的增加,应尽量从列表尾部进行元素的增加与删除操作。 列表的insert()可以在列表的任意位置插入元素,但由于列表的自动内存管理功能,insert()方法会涉及到插入位

10、置之后所有元素的移动,这会影响处理速度。 类似的还有后面介绍的remove()方法以及使用pop()函数弹出列表非尾部元素和使用del命令删除列表非尾部元素的情况。,2.1.2 列表元素的增加,import time def Insert(): a = for i in range(10000): a.insert(0, i) def Append(): a = for i in range(10000): a.append(i) start = time.time() for i in range(10): Insert() print(Insert:, time.time()-start)

11、 start = time.time() for i in range(10): Append() print(Append:, time.time()-start),左侧代码运行结果如下: Insert: 0.578000068665 Append: 0.0309998989105,2.1.2 列表元素的增加,(5)使用乘法来扩展列表对象,将列表与整数相乘,生成一个新列表,新列表是原列表中元素的重复。 aList = 3,5,7 bList = aList id(aList) 57091464 id(bList) 57091464 aList = aList*3 aList 3, 5, 7,

12、 3, 5, 7, 3, 5, 7 bList 3,5,7 id(aList) 57092680 id(bList) 57091464,2.1.2 列表元素的增加,当使用*运算符将包含列表的列表重复并创建新列表时,并不创建元素的复制,而是创建已有对象的引用。因此,当修改其中一个值时,相应的引用也会被修改。 x = None * 2 * 3 x None, None, None, None, None, None x00 = 5 x 5, None, 5, None, 5, None x = 1,2,3 * 3 x00 = 10 x 10, 2, 3, 10, 2, 3, 10, 2, 3,2.

13、1.3 列表元素的删除,(1)使用del命令删除列表中的指定位置上的元素。 a_list = 3,5,7,9,11 del a_list1 a_list 3, 7, 9, 11,2.1.3 列表元素的删除,(2)使用列表的pop()方法删除并返回指定(默认为最后一个)位置上的元素,如果给定的索引超出了列表的范围则抛出异常。 a_list = list(3,5,7,9,11) a_list.pop() 11 a_list 3, 5, 7, 9 a_list.pop(1) 5 a_list 3, 7, 9,2.1.3 列表元素的删除,(3)使用列表对象的remove()方法删除首次出现的指定元素,

14、如果列表中不存在要删除的元素,则抛出异常。 a_list = 3,5,7,9,7,11 a_list.remove(7) a_list 3, 5, 9, 7, 11,2.1.3 列表元素的删除,代码编写好后必须要经过反复测试,不能满足于几次测试结果正确。例如,下面的代码成功地删除了列表中的重复元素,执行结果是完全正确的。 x = 1,2,1,2,1,2,1,2,1 for i in x: if i = 1: x.remove(i) x 2, 2, 2, 2,2.1.3 列表元素的删除,然而,上面这段代码的逻辑是错误的。同样的代码,仅仅是所处理的数据发生了一点变化,然而当循环结束后却发现并没有把

15、所有的“1”都删除,只是删除了一部分。 x = 1,2,1,2,1,1,1 for i in x: if i = 1: x.remove(i) x 2, 2, 1,2.1.3 列表元素的删除,两组数据的本质区别在于,第一组数据中没有连续的“1”,而第二组数据中存在连续的“1”。出现这个问题的原因是列表的自动内存管理功能。 在删除列表元素时,Python会自动对列表内存进行收缩并移动列表元素以保证所有元素之间没有空隙,增加列表元素时也会自动扩展内存并对元素进行移动以保证元素之间没有空隙。每当插入或删除一个元素之后,该元素位置后面所有元素的索引就都改变了。,2.1.3 列表元素的删除,正确的代码:

16、 x = 1,2,1,2,1,1,1 for i in x: #切片 if i = 1: x.remove(i) 或者: x = 1,2,1,2,1,1,1 for i in range(len(x)-1,-1,-1): if xi=1: del xi,2.1.4 列表元素访问与计数,使用下标直接访问列表元素,如果指定下标不存在,则抛出异常。 aList3 6 aList3 = 5.5 aList 3, 4, 5, 5.5, 7, 9, 11, 13, 15, 17 aList15 Traceback (most recent call last): File , line 1, in aList15 IndexError: list index out of range,2.1.4 列表元素访问与计数,使用列表对象的index()方法获取指定元素首次出现的下标,若列表对象中不存在指定元素,则抛出异常。 aList 3, 4, 5, 5.5,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号