当前位置:文档之家› 数 据 结 构 与 算 法 从 零 开 始 学 习 ( 2 0 2 0 )

数 据 结 构 与 算 法 从 零 开 始 学 习 ( 2 0 2 0 )

用Python解决数据结构与算法问题(一):Python基础python学习之路 - 从入门到精通到大师一、你【实战追-女生视频】好世界Python是一种现代的,易于学习的面向对象的编程语言。

它具有一组强【扣扣】大的内置数据类型和易于使用的控件结构。

由于是解释【1】型语言,因此通过简单地查看和描述交互式会话,更容易进行【О】检查。

所以好多人会和你说推荐你使用 anaconda 的,比如:【⒈】深度学习入门笔记(五):神经网络的编程基础。

在 j【б】upyter notebook 中是提示输入语句,然后计算你提供的Py【9】thon语句。

例如:pri【5】nt("Hello,World")Hel【2】lo,World打印结果【6】:print("".join("Hello World"))二、数据入门因为Python是支持面向对象的编程范式,这意味着Python认为在解决问题的过程中的重点是数据。

在任何面向对象的编程语言中,类都是被定义用来描述数据的外观(状态)和数据能做什么(行为)。

因为类的用户只看数据项的状态和行为,所以类类似于抽象的数据类型。

数据项在面向对象的范式中称为对象,对象是类的实例。

Python有:两个主要的内置数字类,分别是 int (整型数据类型)和 float (浮点数据类型)。

标准的算术运算,+,-,*,-,和 **(取幂),可以用括号强制操作的顺序来规避正常的操作符优先级。

其他很有用的操作是余数(模组)操作符%、和整数除法--。

注意,当两个整数相除,结果是一个浮点数。

整数除法运算符通过截断所有小数部分来返回商的整数部分。

布尔数据类型,作为Python bool类的实现,在表示真值时非常有用。

布尔数据在标准的布尔操作中,and、or、not,布尔类型的状态值可能是True 和 False。

False or Truenot (False or True)True and True布尔数据对象也被用作比较运算符的结果,例如相等(==)和大于()。

关系运算符和逻辑运算符此外,关系运算符和逻辑运算符可以组合在一起形成复杂的逻辑问题。

下表展示了关系和逻辑运算符:标识符在编程语言中作为名称使用。

在Python中,标识符以字母或下划线(_)开头,大小写敏感,并且可以是任意长度的。

请记住,使用表示含义的名称。

赋值语句在赋值语句的左边第一次使用一个名称时,就会产生一个Python 变量。

赋值语句提供了一种将名称与值关联起来的方法。

该变量将持有对一块数据的引用而不是数据本身。

思考以下会话:theSum = 0theSum = theSum + 1theSum = True赋值语句 theSum = 0 创建一个变量称为 theSum 并让它持有对数据对象0的引用。

通常,会对赋值语句的右侧进行求值,并将对结果数据对象的引用赋值给左侧的名称。

如果数据的类型发生变化,变成布尔值 True,那么变量的类型也如此,theSum 现在变成布尔型。

即相同的变量可以引用许多不同类型的数据。

除了数字和布尔类之外,Python还有许多非常强大的内置集合类。

列表、字符串和元组是有序集合。

集合和字典是无序的集合。

2.1、列表列表是对Python数据对象的零个或多个引用的有序集合。

列表的写法是用方括号括起来、以逗号分隔。

空列表简单的用[]表示。

列表是异构的,这意味着数据对象不需要全部是同一类型,并且可以集合在一起,赋值给一个变量,如下所示。

下面的代码展示了列表中的各种Python数据对象。

[1,3,True,6.5][1, 3, True, 6.5]myList = [1,3,True,6.5][1, 3, True, 6.5]请注意,当Python对列表求值时,会返回列表本身。

然而,为了记住后面的列表操作,它的引用需要赋值给一个变量。

由于列表被认为是按顺序排列,所以它们支持许多可以应用于任何Python序列的操作。

注意,列表(序列)的索引从0开始计数。

切片操作,myList[1:3],返回一个包含索引从1到3的项的列表、但不包含索引为3的项,即左闭右开。

有时需要初始化一个列表,这可以通过使用重复操作快速完成。

例如,myList = [0] * 6[0, 0, 0, 0, 0, 0]除了重复操作符之外,还有一个非常重要的问题是其结果是对序列中的数据对象的引用的重复。

通过思考以下代码得到最好的印证: myList = [1,2,3,4]A = [myList]*3print(A)[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]print(A)[[1, 2, 45, 4], [1, 2, 45, 4], [1, 2, 45, 4]]变量 A 持有三个名为 myList 的原始列表的引用。

注意,对myList 的一个元素的更改,在 A 的所有三种情况中都体现了出来列表基本操作列表支持许多用于构建数据结构的方法,如下:例子如下:myList = [1024, 3, True, 6.5]myList.append(False)print(myList)[1024, 3, True, 6.5, False]myList.insert(2,4.5)print(myList)[1024, 3, 4.5, True, 6.5, False]print(myList.pop())print(myList)[1024, 3, 4.5, True, 6.5]print(myList.pop(1))print(myList)[1024, 4.5, True, 6.5]myList.pop(2)[1024, 4.5, 6.5]可以看到一些方法,比如 pop,返回一个值,并修改列表。

myList.sort()print(myList)[4.5, 6.5, 1024]myList.reverse()print(myList)[1024, 6.5, 4.5]print(myList.count(6.5))print(myList.index(4.5))myList.remove(6.5)print(myList)[1024, 4.5]del myList[0]print(myList)其他的,比如 reverse 和 append,只是简单地修改列表,没有返回值。

除此之外,还应该注意到熟悉的 dot 符号,使对象调用方法。

(54).__add__(21)在此段中,整型对象54来执行它的 add 方法(在Python中称为__add__),并将它与传过去的21相加,结果是75。

当然,通常还是直接把它写成54+21。

range函数通常与列表一起讨论的一个常见的Python函数是 range 函数。

range 产生一个范围对象,表示一系列的值。

通过使用 list 函数,可以将 range 对象的值看作一个列表。

例子如下:range(10)range(0, 10)list(range(10))[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]range(5,10)range(5, 10)list(range(5,10))[5, 6, 7, 8, 9]list(range(5,10,2))list(range(10,1,-1))[10, 9, 8, 7, 6, 5, 4, 3, 2]range 对象代表一个整数序列。

默认情况下,它将从0开始。

常用的参数有三个,在特定的点开始和结束,甚至可以跳过某项。

在第一个例子中,(10),序列从0开始,递增到10但不包括10。

在第二个例子中,范围(5,10)从5开始,递增到10但不包括10。

在第三个例子中,范围(5,10,2)类似的执行,但是跳过2(同样,10不包括在内)。

2.2、字符串字符串是由零个或多个字母、数字和其他符号组成的序列集合。

通过使用引号(单引号或双引号)将文字字符串值与标识符区分开来。

myName = "David"myName[3]myName*2'DavidDavid'len(myName)由于字符串也是序列,所以可以使用上面描述的任何操作。

另外,字符串有许多方法,其中一些方法如下所示。

举几个例子:myName.upper()myName.center(10)myName.find('v')myName.split('v')['Da', 'id']myName.split()['David']其中,split 对于处理数据非常有用。

split 将使用一个字符串,并使用分割字符作为分隔点返回字符串列表。

在这个例子中,v 是分隔点。

如果没有指定分隔点,split 方法会寻找空格字符,如制表符、换行符和空格。

列表和字符串之间的主要区别是,列表可以被修改,而字符串不能,这被称为可变性。

列表是可变的;字符串是不可变的。

[1, 3, True, 6.5]myList[0]=2**10[1024, 3, True, 6.5]myName[0]='X'---------------------------------------------------------------------------TypeError Traceback (most recent call last)ipython-input-7-c44c71c6d2f3 in module1 myName = "David"---- 2 myName[0]='X'TypeError: 'str' object does not support item assignment2.3、元组元组与列表非常相似,因为它们是异构的数据序列。

不同之处在于,元组是不可变的,就像字符串一样。

任何元组都不能被改变。

作为序列,它们可以使用上面描述的任何操作。

例如,myTuple = (2,True,4.96)(2, True, 4.96)len(myTuple)myTuple[0]myTuple * 3(2, True, 4.96, 2, True, 4.96, 2, True, 4.96)myTuple[0:2](2, True)但是,如果试图改变元组中的一个项,将会得到一个错误。

注意,错误消息提供了问题的位置和原因。

myTuple[0] = 1---------------------------------------------------------------------------TypeError Traceback (most recent call last)ipython-input-6-a2c5dba3de3b in module1 myTuple = (2,True,4.96)---- 2 myTuple[0] = 1TypeError: 'tuple' object does not support item assignment2.4、集合set 是一个无序的,为空或是更多不可变的Python数据对象集合。

相关主题