Python科学计算与数据处理第一章ppt课件.ppt
Python基础,2,本节目录,Python语言数据类型、运算符和表达式Python的数据结构Python的流程控制Python函数Python模块Python的输入、输出异常处理,3,Python语言数据类型、运算符和表达式,Python基础,4,Python语法基础,文件类型Python程序基本概念Python运算符和表达式,文件类型,在交互模式下,想输入多少Python命令,就输入多少;每个命令在输入回车后都立即运行。只要不重新开启新的解释器,我们都在同一个会话中运行,因此,前面定义的变量,后面的语句都可以使用。一旦关闭解释器,会话中的所有变量和敲入的语句将不复存在。,5,文件类型,为了能够永久保存程序,并且能够被重复执行,我们必须要将代码保存在文件中,因此,就需要用编辑器来进行代码的编写,和其他编程语言一样,不同的Python的源代码可以直接执行而不需要像编译型语言一样编译成二进制代码。Python源代码文件就是普通的文本文件,只要是能编辑文本文件的编辑器都可以用来编写Python程序,如notepad/word等。,6,7,文件类型,Python的文件类型分为三种:源代码、字节代码、优化代码。源代码 Python源代码文件,即py脚本文件,由python.exe解释,可在控制台下运行。 pyw脚本文件是图形用户接口(Graphicaluserinterface) 的源文件,专门用来开发图形界面,由pythonw.exe解释运行。,8,文件类型,字节代码 Python源文件经过编译后生成的pyc文件,即字节文件。它与平台无关,所以可以移植到其他系统上。下面这段脚本可以把example.py编译为example.pyc#compilepytopycimportpy_compilepy_pile(example.py)运行此脚本即可得到example.pyc,文件类型,不能在python的交互界面中运行。只能够在DOS屏幕上运行:python example.pyc 在程序中调用可以用: os.system (python example.pyc )优化代码 经过优化的源文件生成扩展名为pyo的文件,即优化文件。下面步骤可以把example.py编译为example.pyo启动命令行窗口,进入example.py所在目录:D: cdD:pathexamples,9,文件类型,在命令行中输入python-O-mpy_compileexample.py参数-O表示生成优化代码参数-m表示导入的py_compile模块作为脚本运行。编译example.pyo需要调用py_compile模块中的compile()方法参数example.py是待编译的文件名。 能够在DOS屏幕上运行:python example.pyo,10,文件类型,当程序比较大的时候,可以将程序划分成多个模块编写,每个模块用一个文件保存。模块之间可以通过导入互相调用(import)。模块也可以导入库中的其他模块。 Python是以模块进行重用的,模块中可以包括类、函数、变量等。,11,编码风格,以“#”号开头的内容为注释,python解释器会忽略该行内容。 在Python中是以缩进(indent)来区分程序功能块的,缩进的长度不受限制,但就一个功能块来讲,最好保持一致的缩进量。 可以使用空格、Tab键等,但是最好保持一致如果一行中有多条语句,语句间要以分号(;)分隔。,12,Python程序基本概念,常量一个字面意义上的常量的例子是如同5、1.23、9.25e-3这样的 数,或者如同This is a string、“Its a string!”这样的字符串。它们被称作字面意义上的,因为它们具备 字面 的意义按照它们的字面意义使用它们的值。数2总是代表它自己,而不会是别的什么东西它是一个常量,因为不能改变它的值。因此,所有这些都被称为字面意义上的常量。,13,Python程序基本概念,数 在Python中有4种类型的数整数、长整数、浮点数和复数。2是一个整数的例子。 长整数不过是大一些的整数。 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表 示52.3 * 10-4。 (-5+4j)和(2.3-4.6j)是复数的例子,14,Python程序基本概念,字符串 字符串是 字符的序列 。 C语言中用字符数组表示,如char str20 = “hello”. Python中的字符串可以如下表示:使用单引号():可以用单引号指示字符串,就如同 Hello world 这样。所有的空白,即空格和制表符都照原样保留。 使用双引号(“):在双引号中的字符串与单引号中的字符串的使用完全相同,例如”Whats your name?“。,15,Python程序基本概念,使用三引号(或“”“):利用三引号,可以指示一个多行的字符串,可以在三引号中自由的使用单引号和双引号,如:,16,这是一个多行的字符串,你可以写入任意字符,甚至是单引号和双引号,Python程序基本概念,转义符 假设想要在一个字符串中包含一个单引号(),那么该怎么指示这个字符串?例如,这个字符串是Whats your name?。肯定不能用Whats your name?来指示它,因为Python会弄不明白这个字符串从何处开始,何处结束。 所以,需要指明单引号而不是字符串的结尾。可以通过 转义符 来完成这个任务。用来指示单引号 注意这个反斜杠。现在可以把字符串表示为Whats your name?。,17,Python程序基本概念,18,另一个表示这个特别的字符串的方法是“Whats your name?”,即用双引号。类似地,要在双引号字符串中 使用双引号本身的时候,也可以借助于转义符。另外,可以用转义符来指示反斜杠本身。值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行.,This is the first sentence.This is the second sentence.,This is the first sentence. This is the second sentence.,Python程序基本概念,19,自然字符串 如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。例如rNewlines are indicated by n“比较下面两句话的区别:,print Newlines are indicated by nhello print rNewlines are indicated by nhello,Python程序基本概念,20,Unicode字符串Unicode是书写国际文本的标准方法。如果想要用中文、日文、韩文等写文本,那么需要有一个支持Unicode的编辑器。类似地,Python允许处理Unicode文本只需要在字符串前加上前缀u或U。例如,uThis is a Unicode string.。在处理文本文件的时候尽量使用Unicode编码,特别是文件中含有用非英语的语言写的文本。,Python程序基本概念,21,字符串是不可变的 这意味着一旦创造了一个字符串,就不能再改变它了。虽然这看起来像是一件坏事,但实际上它不是。我们将会在后面的程序中看到为什么说它不是一个缺点。级连字符串 如果把两个字符串按字面意义相邻放着,他们会被Python自动级连。例如,Whats your name?会 被自动转为Whats your name?,Whats your name?,Whats your name?,Whats + your name? ,Python程序基本概念,变量仅仅使用字面意义上的常量很快就会不能满足我们的需求我们需要一种既可以储存信息又可以对它们进行操作(改变它的内容)的方法。这是为什么要引入 变量 。变量的值可以变化,即可以使用变量存储任何东西。变量只是计算机中存储信息的一部分内存。与字面意义上的常量不同,需要一些能够访问这些变量的方法,因此要给变量命名。,22,Python程序基本概念,标识符的命名 变量是标识符的例子。 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,要遵循这些规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线( _ )。标识符名称的其他部分可以由字母(大写或小写)、下划线( _ )或数字(0-9)组成。,23,Python程序基本概念,标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。注意前者中的小写n和后者中的大写N。有效 标识符名称的例子有i、_my_name、name_23和a1b2_c3。无效 标识符名称的例子有2things、this is spaced out和my-name。,24,Python程序基本概念,标识符的命名-关键字,25,Python程序基本概念,标识符的命名-类保留_*:from module import *将不被导出。交互环境最后表达式的值。_*_:系统定义的名字_*:类的私有变量或方法,26,Python程序基本概念,数据类型每个变量都有自己的类型,可以处理不同类型的值,称为数据类型。基本的类型是数和字符串,我们已经讨论过它们了。在后面的章节里面,我们会研究怎么用类创造我们自己的类型。Python中一切都是对象,包括字符串和数。,27,Python程序基本概念,对象 Python把在程序中用到的任何东西都称为 对象。Python是完全面向对象的语言,任何变量都是对象,甚至包括执行的代码:函数。,28,# Filename : var.pyi = 5print ii = i + 1print is = This is a multi-line string.This is the second line.print s,Python程序基本概念,逻辑行与物理行物理行是在编写程序时所 看见 的。逻辑行是Python 看见 的单个语句。Python假定每个 物 理行 对应一个 逻辑行 Python希望每行都只使用一个语句,这样使得代码更加易读 如果想要在一个物理行中使用多于一个逻辑行,那么需要使用分号(;)来特别地标明这种用法。分号表示一个逻辑行/语句的结束。例如:,29,i=5print i,i=5;print i;,i=5;print i,Python程序基本概念,强烈建议坚持在每个物理行只写一句逻辑行。仅仅当逻辑行太长的时候,在多于一个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更加易读。 下面是一个在多个物理行中写一个逻辑行的例子。它被称为明确的行连接。,30,s = This is a string. This continues the string.print s,This is a string. This continues the string.,Python程序基本概念,有一种暗示的假设,可以不需要使用反斜杠。这种情况出现在逻辑行中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接.。,31,a = 100, 200print a,Python程序基本概念,缩进空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行 首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。错误的缩进会引发错误 不同于C/C+、Java用的是,32,i = 5print Value is, i # Error! Notice a single space at the start of the lineprint I repeat, the value is, i,Python程序基本概念,如何缩进 不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。强烈建议 在每个缩进层次使用 单个制表符 或 两个或四个空格 。选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即 只 使用这一种风格。,33,Python程序基本概念,Python迫使程序员写成统一、整齐并且具有可读性程序的主要方式之一,这就意味着必须根据程序的逻辑结构,以垂直对齐的方式来组织程序代码,结果就是让程序更一致,并具有可读性,因而具备了重用性和可维护性,对自己和他人都是如此。,34,if (x) if (y) statements;else statements;,if x: if y: statementselse: statements,Python程序基本概念,Python程序结构程序由模块构成模块包含语句语句包含表达式表达式建立并处理对象 Python语法实质上是有语句和表达式组成的。表达式处理对象并嵌套在语句中。语句编程实现程序操作中更大的逻辑关系。此外,语句还是对象生成的地方,有些语句会生成新的对象类型(函数、类等)。语句总是存在于模块中,而模块本身则又是由语句来管理的。,35,Python程序基本概念,Python语法Python增加了什么 新的语法成分冒号(:)。所有的复合语句(语句中嵌套了语句)都有相同的一般形式,就是首行以冒号结尾,首行下一行嵌套的代码往往按缩进的格式书写。Python删除了什么括号是可选的终止行就是终止语句(分号)缩进的结束就是代码块的结束(),36,if (x y) x = 1; y = 2;,if x y: x = 1 y = 2,运算符与表达式,编写的大多数语句(逻辑行)都包含表达式。一个简单的表达式例子如2 + 3。一 个表达式可以分解为运算符和操作数。运算符 的功能是完成某件事,它们由如+这样的符号或者其他特定的关键字表示。运算符需要数据来进行运算,这样的数据被称为 操作数 。在这个例子中,2和3是操作数。在Python中,表达式可以作为语句,但表达式结果不会存储。,37,运算符及其用法,38,运算符及其用法,39,运算符及其用法,40,运算符及其用法,41,运算符优先级,如果有一个如2 + 3 * 4那样的表达式,是先做加法呢,还是先做乘法? 应当先做乘法这意味着乘法运算符的优先级高于加法运算符 。下面给出Python运算符优先级。,42,运算符优先级由高向低,43,运算符优先级,建议使用圆括号来分组运算符和操作数,以便能够明确地指出运算的先后顺序,使程序尽可能地易读。例如,2 + (3 * 4)显然比2 + 3 * 4清晰。与此同时,圆括号也应该正确使用,而不应该用得过滥,比如:(2 + (3 + 4)。,44,运算符优先级,计算顺序默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。然而,如果想要改变它们的计算顺序,可以使用圆括号。例如,想要在一个表达式中让加法在乘法之前计算,那么就可以写成类似(2 + 3) * 4的样子。结合规律运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4被计算成(2 + 3) + 4。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c被处理为a = (b = c)。,45,真值表,46,复合表达式 and当计算a and b时,python会计算a,如果a为假,则取a值,如果a为真,则python会计算b且整个表达式会取b值。 or当计算a or b时,python会计算a,如果a为真,则整个表达式取a值,如果a为假,表达式将取b值。 not如果表达式为真,not为返回假,如为表达式为假,not为返回真。,真值表在判断、循环等语句中应用广泛。,给变量赋值,简单赋值,Variable(变量)=Value(值)。 多变量赋值,Variable1,variable2,.=Value1,Value2,. a,b,c=1,2,3a=1,2,3;b,c,d=aa=(1,2,3);b,c,d=a,47,给变量赋值,多变量赋值也可用于变量交换 a,b=b,a多目标赋值,a=b=variable自变赋值,如+=,-=,*=等。在自变赋值中,python仅计算一次,而普通写法需计算两次;,48,变量和基本的表达式,变量就是用来记录程序中的信息,它的特点:变量像对象一样不需要声明变量在第一次赋值时创建变量在表达式中使用将被替换为他们的值变量在表达式中使用以前必须已经赋值,2009-8-10,Python程序设计语言,49,Python的数据结构,50,Python基础,51,Python的数据结构,数字字符串列表元组字典,52,数字,53,Python提供了常用的数字类型:整数、浮点数以及与之相关的语法和操作。允许使用八进制、十六进制常量。提供了复数类型。提供了无穷精度的长度类型(只要内存空间允许,可以增长成为任意位数的整数)。, import sys print sys.maxint2147483647,数字常量,54,内置数学工具和扩展,表达式操作符 +、-、*、/、*内置数学函数 pow、abs公用模块 random、math等专业扩展NumPy 矩阵、向量处理等,55,数字的基本应用,56, a = 3 b = 4 a + 14 a - 12 b * 312 b / 22 a % 21 b * 216 2.0*b16.0, c * 2Traceback (most recent call last): File , line 1, in NameError: name c is not defined, b/2+a5 b /(2.0 + a)0.80000000000000004 print b /(2.0 + a)0.8,数字显示的格式,57, num = 1 / 3.0 num0.33333333333333331 print num0.333333333333 %e%num3.333333e-01 %2.2f%num0.33,数学内置函数和内置模块,math模块-普通数学函数cmath模块-处理复数的模块,58,数学内置函数和内置模块,random模块 用于产生随机数,59, import random random.random()0.33452758558893336 random.randint(1, 10)5 random.choice(a, b, c)c,字符串的定义,60,字符串在python被看成是单个字符的序列,具有序列对象的特殊功能,字符串是固定的,不可变的。 可在字符串中使用单引号和双引号,注意要搭配。如boy, ”girl”等。字符串内部的一个反斜杠“”可允许把字符串放于多行也可以使用三个或”使字符串跨行。使用“*”号重复字符串,如:hello*3hellohellohello, a = 12345. 67890 print a1234567890, a=hello*3 print ahellohellohello, a=123456. 7890 print a1234567890,转义符,61,不想让转义字符生效时,用r和R来定义原始字符串。如:print rtr tr,字符串基本操作,+字符串合并*字符串重复,62, len(abc)3 abc+defabcdef abc defabcdef hello*4hellohellohellohello abc+9Traceback (most recent call last): File , line 1, in TypeError: cannot concatenate str and int objects,字符串基本操作,可以用for语句在一个字符串中进行迭代,并使用in表达式操作符进行成员关系的测试,这实际上是一种搜索。for循环指派了一个变量去获取一个序列其中的元素,并对每一个元素执行一个或多个语句,变量c相当于在字符串中步进的指针。,63, s = hello for c in s:. print c,. h e l l o h in sTrue b in sFalse,字符串索引和分片,字符串是字符的有序集合,能够通过其位置来获得他们的元素Python中字符串中的字符是通过索引提取的索引从0开始,但不同于C语言的是可以取负值,表示从末尾提取,最后一个是-1,前一个是-2,依次类推,认为是从结束处反向计数,64, s = spam s0s s1p s-1m s-2a,字符串索引和分片,分片:从字符串中分离提取了一部分内容(子字符串);可以用于提取部分数据,分离出前、后缀等场合。当使用一对以冒号分隔的偏移索引字符串这样的序列对象时,Python就返回一个新的对象,其中包含了以这对偏移所标识的连续的内容。左边的偏移被取作是下边界(包含下边界在内),而右边的偏移被认为是上边界(不包括上边界在内)。如果被省略上下边界的默认值分别对应为0和分片对象的长度。,65, s = spam s1:3pa s1:pam s:-1spa s:spam,索引和分片的总结,索引(si)获取特定偏移的元素第一个元素的偏移为0负偏移索引意味着从最后或右边反向进行计数s0获取第一个元素s-2获取倒数第二个元素,66,索引和分片的总结,分片(si:j)提取对应的部分作为一个序列上边界并不包含在内分片的边界默认为0和序列的长度,如果没有给出的话s1:3获取从偏移为1开始,直到但不包含偏移为3的元素s1:获取了从偏移为1直到末尾之间的元素s:3获取从偏移为0直到但不包含偏移为3的元素s:-1获取从偏移为0直到但不包含最后一个元素之间的元素s:获取从偏移为0直到末尾之间的所有元素,67,分片的扩展形式,在Python2.3后,分片表达式增加了一个可选的第三个索引,用作步进选取完整形式为:XI:J:K,这表示:索引(获取)对象X中元素,从偏移为I直到J-1,每隔K元素索引一次K默认为1,这就是通常在切片中从左至右提取每个元素的原因步进为负数表示将会从右至左进行而不是从左至右,68,分片的扩展形式,X1:10:2会取出X中,偏移量1-9之间,间隔一个元素的元素,即获取偏移量为1、3、5、7、9,69, s = abcdefghijklmnop s1:10:2bdfhj s:2acegikmo, s = 0123456 s:0123456 s:-16543210 s:-26420 s1:5:-1 s5:1:-15432 s9:-16543210 s6:-1:-1 s6:-2:-16,字符串转化,Python不允许字符串和数字直接相加。这是有意设计的,因为+既能够进行加法运算也能够进行合并运算,这样的语法会变得模棱两可,因此,Python将其作为错误处理,在Python中,如果让操作变得复杂或含糊,就会避免这样的语法。,70, 15 + 1Traceback (most recent call last): File , line 1, in TypeError: cannot concatenate str and int objects,字符串转化,如果用户从文件或用户界面得到一个作为字符串的数字,怎么把这个字符串变为数字型呢?这就用到类型的转换函数,71, s = 42 type(s) i = int(s) type(i) s1 = str(i) type(s1), s = 15 s + 1Traceback (most recent call last): File , line 1, in TypeError: cannot concatenate str and int objects int(s) + 116,通过明确的手动类型转换再进行+操作,字符串转化,常用的类型转换还有字符串到浮点型的转换。之后会深入学习内置的eval函数,用于运行一个包含了Python表达式代码的字符串。,72, s = 15.0 float(s)15.0, eval(12)12 eval(12 + 3)15,字符串代码转换,单个字符可以通过ord函数转换为对应的ASCII数值(整数)。chr函数相反,可以将一个整数转换为对应的字符。,73, ord(a)97 chr(97)a,修改字符串,缺省情况下,字符串对象是“不可变序列”,不可变的意思是不能实地的修改一个字符串。那如何改变一个字符串呢?这就要利用合并、分片这样的工具来建立并赋值给一个新的字符串;必要的话,可以将结果赋值给字符串最初的变量名。,74, s = spam s0 = xTraceback (most recent call last): File , line 1, in TypeError: str object does not support item assignment, s = spam s = s + SPAM sspamSPAM s = s:4 + OK! + s-1 sspamOK!M,修改字符串,每修改一次字符串就生成一个新的字符串对象,这看起来好像会造成效率下降,其实,在Python内部会自动对不再使用的字符串进行垃圾回收,所以,新的对象重用了前面已有字符串的空间。Python的效率比我们想象的要好。,75,字符串格式化,Python可以用%操作符编写格式化的字符串格式化字符串:1、在%操作符左侧放置一个需要进行格式化的字符串,这个字符串带有一个或多个嵌入的转换目标,都以%开头,如%d、%f等2、在%操作符右侧放置一个对象(或多个,在括号内),这些对象会被插入到左侧格式化字符串的转换目标的位置上,76, bookcount = 10 there are %d books%bookcountthere are 10 books,字符串格式化,77, %d %s %d you%(1, spam, 4)1 spam 4 you %s - %s - %s%(42, 3.1415926, 1, 2, 3)42 - 3.1415926 - 1, 2, 3,左侧的目标位置都要求是%s(字符串),这就表示要将右边的对象都转换为字符串,另外要注意的是,格式化总会返回新的字符串作为结果,而不是对左侧的字符串进行修改,由于字符串是不可变的;因此,如果需要的话,可以分配一个变量名来保持结果,List列表,78,列表是Python中最具灵活性的有序集合对象类型。和字符串不同的是,列表可以包含任何种类的对象:数字、字符串、自定义对象甚至其他列表。似与其他高级语言的数组列表是可变对象,支持在原处修改,可以通过指定的偏移值和分片、列表方法调用、删除语句等方法实现。,列表的主要性质,79,任意对象的有序集合 从功能是看,列表就是收集其他对象的地方,可以他们看成数组;同时,列表所包含的每一项都保持了从左到右的位置顺序(也就是说,它们是序列)。 通过偏移读取 和字符串一样,可以通过列表对象的偏移对其进行索引,从而读取对象的一部分内容。当然也可以执行诸如分片和合并之类的操作。,列表的主要性质,80,可变长度、异构以及任意嵌套和字符串不同,列表可以根据需要增长或缩短(长度可变),并且可以包含任何类型的对象,并支持任意的嵌套。 可变序列列表支持在原处的修改,也可以响应所有针对字符串序列的操作,如索引、分片以及合并。实际上,序列操作在列表与字符串中工作方式相同。唯一区别是:当合并或分片应用于列表时,返回新的列表而不是新的字符串。当然,支持某些字符串不支持的操作。,常用列表常量和操作,81,列表的方法,append(x) 把一个元素添加到列表的结尾,相当于alen(a): = xextend(L) 通过添加指定列表的所有元素来扩充列表,相当于alen(a):=Linsert(i,x) 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如a.insert(0,x)会插入到整个链表之前,而a.insert(len(a), x)相当于a.append(x)。,82,列表的方法,remove(x) 删除链表中值为x的第一个元素。如果没有这样的元素,就会返回一个错误。pop(i) 从链表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从链表中被删除。(方法中i两边的方括号表示这个参数是可选的,而不是要求输入一对方括号,会经常在Python库参考手册中遇到这样的标记。),83,列表的方法,index(x) 返回链表中第一个值为x的元素的索引。如果没有匹配的元素就会返回一个错误。count(x) 返回x在链表中出现的次数。sort() 对链表中的元素进行适当的排序。reverse() 倒排链表中的元素。,84,列表的方法,85, a = 66.6, 333, 333, 1, 1234.5 print a.count(333), a.count(66.6), a.count(x)2 1 0 a.insert(2, -1) a.append(333) a66.599999999999994, 333, -1, 333, 1, 1234.5, 333 a.index(333)1 a.remove(333) a66.599999999999994, -1, 333, 1, 1234.5, 333 a.reverse() a333, 1234.5, 1, 333, -1, 66.599999999999994 a.sort() a-1, 1, 66.599999999999994, 333, 333, 1234.5,List对象的操作,86,help(list)Help(list.count),把列表当作堆栈使用,链表方法使得链表可以很方便的做为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用append() 方法可以把一个元素添加到堆栈顶。用不指定索引的pop() 方法可以把一个元素从堆栈顶释放出来。举例:,Python程序计语言,87, st = 3, 4, 5 st.append(6) st.append(7) st3, 4, 5, 6, 7 st.pop()7 st3, 4, 5, 6 st.pop()6 st.pop()5 st3, 4,把列表当作队列使用,也可以把链表当做队列使用,队列作为特定的数据结构,最先进入的元素最先释放(先进先出)。使用append()方法可以把元素添加到队列最后,以0为参数调用pop() 方法可以把最先进入的元素释放出来。,88, queue = a, b, c queue.append(d) queue.append(e) queuea,也可以把链表当做队列使用,队列作为特定的数据结构,最先进入的元素最先释放(先进先出)。使用append()方法可以把元素添加到队列最后,以0为参数调用pop() 方法可以把最先进入的元素释放出来。b, c, d, e queue.pop(0)a queueb, c, d, e queue.pop(0)b queuec, d, e,删除列表元素,可以用del进行可以删除某个索引的元素或切片元素,89, lst = 1, 2, 3 lst1, 2, 3 del lst1 lst1, 3 lst.append(4) lst1, 3, 4 del lst0: lst,Tuple元组,90,我们知道链表和字符串有很多通用的属性,例如索引和切片操作。它们是序列类型中的两种。因为Python是一个在不断进化的语言,也会加入其它的序列类型,另一种标准序列类型:元组。,元组简介,一个元组由数个逗号分隔的值组成,例如:如上所示,元组在输出时总是有括号的,以便于正确表达嵌套结构。在输入时,有或没有括号都可以,不过经常括号都是必须的(如果元组是一个更大的表达式的一部分)。,91, t = 12345, 54321, hello t012345 t(12345, 54321, hello) u = t, (1, 2, 3) u(12345, 54321, hello), (1, 2, 3),元组,元组有很多用途。例如(x, y)坐标点,数据库中的员工记录等等。元组就像字符串,不可改变:不能给元组的一个独立的元素赋值(尽管可以通过联接和切片来模仿)可以通过包含可变对象来创建元组,例如链表。,92, lst = 1, 2, 3 t = tuple(lst) t(1, 2, 3),元组,一个特殊的问题是构造包含零个或一个元素的元组:为了适应这种情况,语法上有一些额外的改变。一对空的括号可以创建空元组;要创建一个单元素元组可以在值后面跟一个逗号(在括号中放入一个单值是不够的)。丑陋,但是有效。例如:,93, emp = () emp() single = a, # len(emp)0 len(single)1 single(a,),元组封装和解封,语句t = 12345, 54321, hello! 是元组封装(sequence packing)的一个例子:值12345,54321 和hello! 被封装进元组。其逆操作可能是这样:这个调用被称为序列拆封非常合适。序列拆封要求左侧的变量数目与序列的元素个数相同。,94, t = (1, 2, 3) x, y, z = t print x, y, z1 2 3,元组封装和解封,拆封和封装一点不对称:封装多重参数通常会创建一个元组,而拆封操作可以作用于任何序列。,95, t = 1, 2, 3 x, y, z = t print x, y, z1 2 3 s = 123 x,y,z = s print x, y, z1 2 3,help(tuple)Help(tuple.count),序列对象,96,字符串、列表和元组的对象类型均属于称为序列的Python对象,一种可使用数字化索引进行访问其中元素的对象 。可用算术运算符联接或重复序列。 (+/*)比较运算符(,=,!=,=)也可用于序列 。a=“123” b = “456” a和b的比较关系,序列对象,可通过下标,切片和解包来访问序列的某部份。 a=“123456” print a1,a3:,a:3,a2:4in运算符可判断当有对象是否序列对象成员 1 in a也可通过循环运算符对序列对象进行迭代操作。 for x in range(1,10):,97,Dictionary字典,98,另一个非常有用的Python内建数据类型是字典。字典在某些语言中可能称为“联合内存”(“associative memories”)或“联合数组”(“associative arrays”)。 字典类似于通过联系人名字查找地址和联系人详细情况的地址簿,即:我们把键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,将无法找到正确的信息。,字典,序列是以连续的整数为索引,与此不同的是,字典以关键字为索引关键字可以是任意不可变类型,通常用字符串或数值。如果元组中只包含字符串和数字,它可以做为关键字,如果它直接或间接的包含了可变对象,就不能当做关键字不能用列表做关键字,因为链表可以用它们的append()和extend()方法,或者用切片、或者通过检索变量来即时改变基本说来,应该只使用简单的对象作为键,99,字典,理解字典的最佳方式是把它看做无序的(关键字:值)对集合,关键字必须是互不相同的(在同一个字典之内)。一对大括号创建一个空的字典:。字典的主要操作是依据关键字来存储和析取值。也可以用del来删除(关键字:值)对如果使用一个已经存在的关键字存储新的值或对象,以前为该关键字分配的值就会被遗忘。试图析取从一个不存在的关键字中读取值会导致错误。,100,字典,101,字典的keys()方法返回由所有关键字组成的列表,该列表的顺序不定(如果需要它有序,只能调用返回列表的sort()方法)使用字典的has_key()方法可以检查字典中是否存在某一关键字字典的values()方法返回字典内所有的值字典的get()方法可以根据关键