Python数据结构,计算问题
2018-08-12 《Python 算法》以及《用Python解决数据结构和算法》
什么是算法?
在计算机的世界中,算法本质上是我们对某一个问题或则某一类问题的解决方案。也就是说,如果我们想用计算机来解决问题的话,必须将问题的解决思路准确而完整地描述出来,同时计算机 也要能理解这个描述。这就要我们将整个描述转化成一系列清晰的指令,这些指令要能接收满足一定规范的输入,并在有限的时间内产生相应的输出。我们通常将这些指令成为程序,而算法是程序的灵魂!
(一句话,算法是程序的灵魂)
但是程序光有灵魂也是不够的,比如你知道怎么做的思路,但是没有给你工具,没有做怎么能达到目的,在这里,如果用C和C++来进行编程的话,我们对于算法设计的专注力很容易被数据结构这种更为基础的细节所干扰,在过去的相当一段时间里,我们在进行算法设计的时候通常用的是一种更接近于人类语言的“伪代码”。显然用伪代码可以让我们很好的专注于算法的表达,但遗憾的是,他们无法在计算机中执行,所以我们需要一种既能在抽象层面接近于伪代码,又能在计算机上像C那样通用的语言,显然Python就是这样的一种语言!
什么是数据类型?
在计算机中国,所有的饿数据项都用一段二进制表示,为了使这些数字能代表数据,我们就需要有数据类型(data types)。数据类型把这些二进制数据翻译成我们可以理解的、在解决问题中讲得通的内容,这些底层的、预置的数据类型是算法的基石。
早期,我们把对程序的抽象视为一种通过隐藏特定函数的细节让用户可以在更高层次看问题的方法,数据抽象(data abstraction)的思想与之相似。抽象数据类型(abstract data type),不涉及数据,操作如何执行,只是关于如何查看数据和许可操作的逻辑性描述。这意味着我们关注的只是数据代表的含义而不是最终运行的过程。通过提出这种抽象概念,我们实现了对数据的封装(encapsulation)。这种理念就是通过对执行的数据的封装,使之从用户的视野中消失,这就叫作信息隐藏(information hiding)
如上图展示了抽象数据的概念及运行机制。用户通过界面实现交互,使用被抽象数据指定的操作。抽象数据类型是与用户交互的外壳。执行的内容被隐藏在更深的一层。
抽象数据类型的执行,被称为数据结构数据结构(data structure),它需要我们用一些程序设计和原始数据类型来提供一个关于数据的实际展示。
Python
预置核心数据类型:
我们说过,Python支持面向对象的编程范式。这意味着Python把数据当做问题解决过程的重点。在Python里,和很多其他面向对象的编程语言一样,我们定义’类(class)‘去描述数据的外观和功能。’类‘类似于抽象数据类型,’类‘的用户只能看到数据项的状态和行为。数据想在面向对象的范式里被称为’对象‘。
Python中拥有两个主要的内嵌的有关数值的类,用以记录整数和浮点数,这两个Python中的类被称为int和float。(其中包括各种运算符等)
赋值语句 theSum = 0 创建了一个名为 theSum 的变量,并且使该变量持有对数据对象0的引用,如下图。一般来说,赋值语句的右半部分会经过求值运算,并把对最终结果的引用派给左边的标识符。在我们的例子中,变量及以theSum指向的数据的类型本来是整型,如果数据类型变了,如图二,重新赋值一个Bool型的值True,那么变量类型也改变了。这说明,在Python中,如果赋值的数据类型变了,那么变量的类型也变了
预置集合数据类型:
除了数值和布尔这两个类,Python还拥有一系列的强大的内嵌的数据容器,列表,字符串和元组都是有序容器,结构上大致相似,但是分别拥有一些在应用中需要好好理解的属性,字典和集合使无序的容器。
一个列表是包含零个或多个对Python中数据的引用的有序容器。列表用方括号括起,里面的每一个数据由逗号隔开[1,2,4],列表是异质的,这意味着列表中的数据不必要同一类,并且列表可以像下面展示的那样派给一个变量。
注意:当Python中给一个列表赋值后,这个列表会被返回。那么为了记录下这个列表以备后用,我们应该将它的引用值给一个变量。
因为列表是有序的,所以他支持一系列可以被用在任何Python中的序号运算符。
li = [,,]
a = li* print(a)
li[] = print(li)
print(a) #运算结果[,,,,,,,,] [,,] [,,,,,,,,] #也就是说a被上次引用后,其值不会随着li改变而改变!
列表提供了一系列的用来构建数据结构的方法
字符串:是可以储存零个或多个字母,数字或其他符号的有序容器。我们称字母,数字和其他的符号为字符,字符串的值
用引号与标识符区分。字符串的相关方法略!
字符串和列表的最大区别就是列表可以被修改,而字符串不能,这杯称作可变性,元组和字符串都是不可变类型!
字符串格式化输出: 我们之前了解过print函数是一种输出数据的方式,它可以获取0或则多个参量并将其输出,默认用空格作为分隔符。实际上,我们可以通过设定sep参数来修改分隔符。此外可以使用end参数来改变每行结尾部分,默认是’\n‘
控制结构:
算法中有两个重要的控制结构:迭代和选择 ,迭代包括;while 和f or,而选择包括:if ……else……
列表解析:
在列表中,存在一种替换方法使用迭代和选择结构创建列表,这被称为列表解析。列表解析可以让你创建基于某些处理或选择条件的列表。
例如我们想生成一个小于10的整数的完全平方的列表,我们可以使用for语句
使用列表解析,我们可以一步完成:
在for结构里,变量x取从1到10的整数值。计算x*x的值后,将结果添加到新列表中,同理,新列表中也可以使用选择语句,以便只有某些项目进行运算并添加到新的列表中
Python数据结构,计算问题的更多相关文章
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- Python科学计算基础包-Numpy
一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能: 快速高效的多维数组对象ndarray. 用于对数组执行元素级计算以及直接对数 ...
- python数据结构与算法之算法和算法分析
1.问题.问题实例.算法的概念区分. 一个例子说明一下: 问题:判断一个正整数N是否为素数 #问题是需要解决的一个需求 问题实例:判断1314是否为素数? #问题实例是该问题的一个具体例子 算法: ...
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- python数据结构树和二叉树简介
一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树.树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否 ...
- Python科学计算类库
Numpy是什么 Numpy是一个开源的Python科学计算库.使用Numpy,就可以很自然地使用数组和矩阵.Numpy包含很多实用的数学函数,涵盖线性代数运算.傅里叶变换和随机数生成等功能. 矩阵: ...
- windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- python数据结构与算法——链表
具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向 ...
随机推荐
- MySQL5.7 在CentOS 下的安装
尝试了在版本的CentOS6.6 和CentOS7.2 下安装,在6.6下比较复杂些.特地做下记录 在CentOS7.2 下安装,需要在官网下载 mysql-5.7.16-1.el7.x86_64.r ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 2_Linear regression with one variable 单变量线性回归
Lecture2 Linear regression with one variable 单变量线性回归 2.1 模型表示 Model Representation 2.1.1 线性回归 Li ...
- mac配置git mergetool为p4merge(2013笔记整理)
既有环境: 1)下载安装p4merge 2)安装git 下面是配置p4merge为git mergetool的步骤 1. /usr/local/bin下创建extMerge文件: $ cat > ...
- Python基础—流程控制
一.Python流程控制 计算机程序在解决某个具体问题时,包括三种情形,即顺序执行所有的语句.选择执行部分的语句和循环执行部分语句,这正好对应着程序设计中的三种程序执行结构流程:顺序结构.选择结构和循 ...
- Tarjan的LCA离线算法
LCA(Least Common Ancestors)是指树结构中两个结点的最低的公共祖先.而LCA算法则是用于求两个结点的LCA.当只需要求一对结点的LCA时,我们很容易可以利用递归算法在O(n)的 ...
- 1-3 并发与高并发基本概念.mkv
- Gym - 101128H:Sheldon Numbers
题意 给你两个整数X和Y 问你在区间[X,Y]中,有多少数字的二进制满足ABAB或者A这种形式.A是某个数量的1,B是某个数量的0. 分析 因为数据规模很大,直接枚举x和y之间的数字然后判断会超时.所 ...
- powerdesigner设计的pdm模型导出清晰图片格式
用powerdesigner设计了数据库模型,想把模型粘贴到数据库文档中,之前一直是Ctrl+A然后复制,直接粘贴过去的,这次领导说放大看不清,o(╯□╰)o 没办法,得搞个高清图复制上去啊,怎么办呢 ...
- mysql视图总结
http://www.2cto.com/database/201508/427083.html 一. 视图概述 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. ...
- Python代码注释
1.单行注释使用# # Code 2.多行注释,成对使用'''或""",三个单撇号或三个双引号 “”” Code “”” 3.多行快捷注释 1).增加注释 选中待注释的多 ...