《计算思维导论:程序设计思想与方法》——第6章:大量数据的表示与处理

简单数据一般指单个数据,并且没有内部结构,不可分割。复杂数据正相反,可在两方面呈现复杂性:一是数量多,二是由内部结构。对于大量数据,可以用集合体数据类型来表示;对于数据的内部结构,可以利用面向对象中的类来刻画。

6.1 概述
  1. 为了表示和处理大量数据,编程语言提供了集合体数据类型,如Python中的列表(list)、元组(tuple)、字典(dict)、集合(set)和文件(file)等。
  2. 数据结构(data structure)是计算机科学的一个分支,专门研究如何将大量相关数据按特定的逻辑结构组织起来,以及如何高效地处理这些数据。
6.2 有序的数据集合体
  1. 大量数据按次序排列而形成的集合体称为序列(sequence)。
    在这里插入图片描述
  2. 序列s和t的大小按字典序确定。
6.2.1 字符串
  1. Python中,每个字符串实际上都是一个对象。
    在这里插入图片描述
6.2.2 列表
  1. 列表是由多个数据组成的序列,可以通过索引(位置序号)来访问列表中的数据。Python列表有两个特点:
  • 第一,列表成员可以由任意类型的数据构成,不要求各成员具有相同类型
  • 第二,列表长度是不定的,随时可以增加和删除成员。
    在这里插入图片描述
    在这里插入图片描述
  1. 列表对象的常用方法:
    在这里插入图片描述
  • 编程案例:一个统计程序
6.2.3 元组
  1. 元组的括号有时可以省略,例如在赋值语句中。
  2. 元组对象支持的方法:
    在这里插入图片描述
  3. 元组类型的名字tuple可以用作构造器,将一个字符串或列表转换成元组对象。
    在这里插入图片描述
6.3 无序的数据集合体
  1. Python提供了两种无序集合体类型:集合和字典。
6.3.1 集合
  1. Python提供了集合类型set,用于表示大量数据的无序集合体。集合可以由各种数据组成,数据之间没有次序,并且互不相同。
  2. 集合类型的值有两种创建方式:一种是用一对花括号将多个用逗号分隔的数据括起来;另一种是调用函数set(),此函数可以将字符串、列表、元组等类型的数据转换成集合类型的数据。
  3. 空集只能用set()来创建,而不能用字面值{}表示,因为Python将{}用于表示空字典。
  4. 集合运算:
    在这里插入图片描述
  5. Python集合是可修改的类型,但集合中的元素必须是不可修改的,所以不能是列表、字典等,只能是数值、字符串、元组之类。
    集合对象的方法:
    在这里插入图片描述在这里插入图片描述
6.3.2 字典
  1. Python中的字典可以通过数据间的关联来查找信息。
  2. Python字典是由大量的“键值对(key-value pair)”组成的集合,每一个键值对形如“key:value”,其用法是通过“键”key来访问相应的“值”value。
  3. 字典类型dict与集合类型set一样属于无序集合体,即字典中的键值对没有特定的排列顺序,因此不能像序列那样通过位置索引来查找成员数据。
  • 创建字典
    字典的字面值是用一对花括号括起来的、以逗号分隔的一些键值对,形如:
    {k1:v1,k2:v2,…,kn:vn}.
    其中,“键”可以是任何不可修改类型的数据,如数值、字符串和元组等;而“值”则可以是任何类型的数据。
    不含任何键值对的字典是空字典,表示为{}。
    除了字面值之外,还可以利用类型构造器dict()来创建字典,创建时需要将字典的键值对信息作为参数传递给dict().
  • 对字典的操作
    字典的主要用途是查找与特定键相关联的值:
    <字典>[<键>]
    返回值就是字典中与给定的键相关联的值。
  1. 字典的数据是不可修改的,与某个键相关联的值可以通过赋值来修改:
    <字典>[<键>] = <新值>
    如果指定的键不存在,则相当于向字典中添加新的键值对。
  2. del命令可以用来删除字典条目:
    del <字典>[<键>]
  3. Python字典对象的方法:
    在这里插入图片描述
6.4 文件

列表、元组、字典等类型虽然可以用于表示大量数据,但它们都属于内存数据类型,是对内存数据的组织方式,另外提供了文件类型来支持大量数据的存储和处理。

6.4.1 文件的基本概念
  1. 一组相关数据存储在一起便构成一个文件(file),每个文件被赋予一个文件名,程序通过文件名来访问文件。
  2. 文件名通常由主名和扩展名构成,后者用来描述文件内容。
  • 目录路径
    一个完整的文件标识由磁盘驱动器、目录层次和文件名三部分构成。
    Python程序中,路径分隔字符可以使用’\’ 和 ‘/’。
  • 文件格式
    在信息管理应用中,大量信息的组织方式通常都采用“字段-记录-文件”的层次格式。字段是最基本的不可分割的数据项;记录是若干个相关字段结合在一起形成的数据;大量同类型的记录即构成了文件。
    在这里插入图片描述
6.4.2 文件操作
  • 打开文件
  1. 函数open用于文件打开:
    f = open(<文件名>,<打开方式>)
    打开方式有“r” 和 “w”等,表示“读”方式和“写”方式。
  2. 以写方式打开文件是,如果指定的文件不存在,则创建该文件;如果指定的文件已经存在,则会清除该文件原来的内容,即相当于创建新文件。
  • 读文件
  1. Python提供了read()、 readline()和readlines()方法用于读取文件内容。
  2. read():
    <变量> = <文件对象>.read()
    读取从当前位置直到文件末尾的内容,并作为字符串返回。
    也可带参数n,表示从当前位置开始的n个字符。
  • 写文件
  1. Python提供两种写文件方法:
    <文件对象>.write(<字符串>)
    <文件对象>.writelines(<字符串列表>)
    f.write()都是紧接着上次写入的内容继续的,需要人工添加换行字符。
  2. Python提供追加打开方式"a",当前位置被定位在文件末尾,可以继续写入文本而不改变原有的文件内容。
  • 关闭文件
    close()
  • 文件处理程序常见的结构
    直接了当的IPO(输入-处理-输出)模式。
  • 向文件追加数据
6.4.3 编程案例:文本文件分析
6.4.4 缓冲
6.4.5 二进制文件与随机存取
  • 二进制文件
  1. 打开二进制文件时必须指明“以二进制方式打开”,具体用“rb”、“wb”和“ab”分别表示读打开、写打开和追加打开。
  • 文件的随机存取
  1. Python提供seek()方法用于文件的随机读取:
    <文件对象>.seek(n)
    <文件对象>.seek(n,m)
    m为0时相对于文件开始位置,m为1时相对于文件当前位置,m为2时相对于文件末尾。偏移为整数表示朝文件尾方向移动,为负数表示向文件头方向移动。
  2. 文件对象还提供tell()方法,用于确定当前读写位置。
6.5 几种高级数据结构
6.5.1 链表
  1. 链表中的成员称为结点,每个结点都由两部分信息组成:结点的数据和结点的链接。链表中最后一个成员的链接必须设置为表示“无所指”的某个特殊值。
  2. 链表结构的第一个结点时整个链表的入口,通常用一个专门的变量来记录链表入口。
    在这里插入图片描述
6.5.2 堆栈
  1. 堆栈(stack)也是一种数据集合体,其中的数据构成一种具有“先进先出(FIFO)”性质的数据结构。
  2. 所谓堆栈,是以如下两个操作进行处理的数据结构:
  • push(x):在堆栈顶部推入一个新数据x,x即成为新的栈顶元素;
  • pop():从堆栈中取出栈顶元素,显然被取出的元素只能时最后加入堆栈的元素。
  • isFull():检查堆栈是否已满;
  • isEmpty():检查堆栈是否为空。
6.5.3 队列
  1. 队列也是一种抽象数据类型,完全由操作定义其特性。
  • enqueue:入队,即在队尾添加数据;
  • dequeue:出队,即将队头数据移出队列作为返回值。
6.6 练习

书籍下载地址:https://download.csdn.net/download/qq_37590544/10959608

猜你喜欢

转载自blog.csdn.net/qq_37590544/article/details/87808511