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 数据结构之双向 ...
随机推荐
- pandas层级索引
层级索引(hierarchical indexing) 下面创建一个Series, 在输入索引Index时,输入了由两个子list组成的list,第一个子list是外层索引,第二个list是内层索引. ...
- 手机发烫是为何—— App 电量测试定位方法
为什么要做电量测试 随着移动互联网的快速发展,手机的实用性.娱乐性越来越强.日常使用中发现,安装了应用后,即使不怎么使用,电量也会消耗很快.但如果恢复出场设置充满电后,手机可以待机很长时间.真相只有一 ...
- 开启mysql远程访问
一.登陆mysql以后执行以下命令: GRANT ALL ON *.* TO username@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUS ...
- Libevent使用例子,从简单到复杂
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39670221 本文从简单到复杂,展示如何使用libevent.网上的许多例子都是只有服务 ...
- c作图-正弦函数图像
#include<graphics.h>#include<math.h>int main(){ int gmode,gdriver=DETECT; double x1,y ...
- fgets、gets和scanf的区别
gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中.换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 3_Linear Algebra Review
Lecture3 Linear Algebra Review 线性代数回顾 3.1 矩阵和向量3.2 加法和标量乘法3.3 矩阵向量乘法3.4 矩阵乘法3.5 矩阵乘法的性质3.6 逆.转置 3. ...
- Java多线程-新特征-信号量Semaphore
简介信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确.合理的使用公共资源. 概念Semaphore分为单值和多值两种,前者只能 ...
- OpenGL顶点缓冲区对象
[OpenGL顶点缓冲区对象] 显示列表可以快速简单地优化立即模式(glBegin/glEnd)的代码.在最坏的情况下,显示列表的命令被预编译存到命令缓冲区中,然后发送给图形硬件.在最好的情况下,是编 ...
- PrimeNG01 angular集成PrimeNG
1 开发环境 本博文基于angular5 2 步骤 2.1 创建angular5项目 详情参见百度 2.2 下载PrimeNG依赖 npm install primeng --save npm ins ...