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数据结构,计算问题的更多相关文章

  1. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  2. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  3. Python科学计算基础包-Numpy

    一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能: 快速高效的多维数组对象ndarray. 用于对数组执行元素级计算以及直接对数 ...

  4. python数据结构与算法之算法和算法分析

    1.问题.问题实例.算法的概念区分. 一个例子说明一下: 问题:判断一个正整数N是否为素数   #问题是需要解决的一个需求 问题实例:判断1314是否为素数? #问题实例是该问题的一个具体例子 算法: ...

  5. Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

  6. python数据结构树和二叉树简介

    一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树.树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否 ...

  7. Python科学计算类库

    Numpy是什么 Numpy是一个开源的Python科学计算库.使用Numpy,就可以很自然地使用数组和矩阵.Numpy包含很多实用的数学函数,涵盖线性代数运算.傅里叶变换和随机数生成等功能. 矩阵: ...

  8. windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等

    安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...

  9. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  10. python数据结构与算法——链表

    具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向 ...

随机推荐

  1. JAXB 专题二(BSP接口实战)

    BSP下单接口 1.xml格式如下 <?xml version="1.0" encoding="utf-8"?> <Request servi ...

  2. Python基础学习四 列表、元组、字典、集合

    列表list,用中括号“[ ]”表示 1.任意对象的有序集合 列表是一组任意类型的值,按照一定顺序组合而成的 2.通过偏移读取 组成列表的值叫做元素(Elements).每一个元素被标识一个索引,第一 ...

  3. 性能调试工具——oprofile

    oprofile利用cpu硬件层面提供的性能计数器(performance counter),通过计数采样,帮助我们从进程.函数.代码层面找出占用cpu的"罪魁祸首". 常用命令 ...

  4. OpenGL顶点缓冲区对象

    [OpenGL顶点缓冲区对象] 显示列表可以快速简单地优化立即模式(glBegin/glEnd)的代码.在最坏的情况下,显示列表的命令被预编译存到命令缓冲区中,然后发送给图形硬件.在最好的情况下,是编 ...

  5. 十二.filter

    Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是 ...

  6. Navicat 连接阿里云的 MySQL

    1 利用Navicat连接阿里云服务器中MySQL 常规连接方式常用于连接本机数据库以及虚拟机中的数据库:但是连接阿里云的MySQL数据库时会出现连接不上的情况,错误信息如下: 1.1 常规中的配置 ...

  7. 605. Can Place Flowers零一间隔种花

    [抄题]: Suppose you have a long flowerbed in which some of the plots are planted and some are not. How ...

  8. 6.Dump域内用户Hash姿势集合

    本文转自先知社区,原文链接:https://xz.aliyun.com/t/2527#toc-10 原文地址:https://pentestlab.blog/2018/07/04/dumping-do ...

  9. C#request和response的中文乱码问题

    request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码:   ...

  10. springboot-条件化注解

    在项目中,有时会遇到我们的Configuration.Bean.Service等等的bean组件需要依条件按需加载的情况.那么Spring Boot怎么做的呢?它为此定义了许多有趣的条件,当我们将它们 ...