Python A 笔记 第三部分


本笔记全部代码都是在Python3.8环境下运行的


第六章 组合数据类型

6.1 组合数据类型概述

组合数据类型为多个同类型或不同类型数据提供单一表示。组合数据类型分为:序列类型、集合类型和映射类型这三类。

数字类型,包括整数类型、浮点数类型和复数类型,这些类型仅能表示一个数据,像这种表示单一数据的类型称为基本数据类型。而在实际计算中,存在大量同时处理多个数据的情况,将多个数据有效组织起来并同一表示的数据的类型,称为组合数据类型。通过单一的表示,使数据操作起来更有序、更容易

  • 序列类型:是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他;
  • 集合类型:是一个元素集合,元素之间无序,相同元素在集合中唯一存在;
  • 映射类型:是”键-值“数据项的组合,每个元素是一个键值对, 表示为(Key,Value);
    截屏2022-04-14 14.10.44

6.1.1 序列类型

序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。当需要访问序列中某个特定值时,只需要通过下标标出即可。

由于元素之间存在顺序关系,所以序列中可以存在数值相同但位置不同的元素,这和集合类型不同。序列类型支持成员关系操作符(in),长度计算函数(len())、分片([]),元素本身也可以是序列类型;

在Python中有许多数据类型都是序列类型,像是str字符串,tuple元组和list列表。字符串可以看成单一字符的有序组合。元组包含0个或多个数据项的==不可变序列类型元组在生成后,任何数据项不能替换或删除,是固定的。列表则是可以修改的序列类型,使用非常灵活。

无论哪种数据类型,只要它是序列类型,都可以使用相同的索引方式:正向递增,反向递减。

截屏2022-04-14 14.20.23

序列类型有12个通用的操作符和函数:

截屏2022-04-14 14.20.58

元组是序列类型中比较特殊的类型,因为一旦创建就不能被修改。元组类型在表达固定数据项、函数多返回值、多变量同步赋值、循环遍历等情况下非常有用。

6.1.2 集合类型

与数学概念一致,集合中的元素不可重复,元素类型只能是固定数据类型,例如:整数、浮点数、字符串、元组等。Python编译器中界定固定数据类型主要考察类型能否进行哈希运算。

集合类型有10个操作符:

截屏2022-04-14 14.46.00

上述操作符表达了集合类型的4中基本操作:交集,并集,差集和补集。

截屏2022-04-14 14.47.04

集合类型有10个操作函数或方法:

截屏2022-04-14 14.47.42

集合类型主要用于三种场景:

  1. 成员关系测试;
  2. 元素去重;
  3. 删除数据项;

截屏2022-04-14 14.48.44

6.1.3 映射类型

映射类型是”键-值“数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间无序。

截屏2022-04-14 14.51.34

键表示一个属性,也可以李继伟一个类别或项目,而值则为内容。键值对将映射关系结构化,用于储存和表达。在Python中主要以字典的形式体现。


6.2 列表类型和操作

6.2.1 列表类型的概念

列表是包含零或多个对象引用的有序序列,属于序列类型。列表的长度没有限制、内容可变,可自由对列表中的数据项进行增加、删除或替换,且元素类型可以不同。因为属于序列类型,所以列表也支持成员关系操作符、长度计算函数以及分片。列表还可以同时使用正向递增和反向递减序号以及使用标准比较操作符对单个数据项逐个比较。

列表用中括号表示,也可通过list()函数将元组或字符串转化为列表,单独使用该函数则返回一个空表:

截屏2022-05-05 14.10.14

需要注意的是:将一个列表A赋值给另外一个列表B,仅能产生B对A的一个新引用,也就是说列表实际只存储一份。

6.2.2 列表类型的操作

序列类型的12个操作符和函数都可以应用于列表类型。由于列表可变,因此总共隔出了列表类型额外的14个常用函数或方法。

截屏2022-05-05 14.13.27


6.3 字典类型和操作

6.3.1 字典类型的概念

列表可以通过整数索引来查找数据,但是许多应用程序需要更灵活的查找方式,例如在检索员工信息时,需要基于身份证或其他证件信息进行查找,而不是信息的存储序号。因此,由键值对构成的字典可以方便、快速地检索信息。

在Python中的字典由大括号(或叫做花括号)建立:

{<Key 1>:<Val 1>, <Key2 >:<Val 2>, ..., <Key N>:<Val N>}

Python中的大括号可以表示集合,因此字典类型也具有和集合类似的性质,即:键值对之间没有顺序且不能重复。下面是一个简单的例子,它储存国家和首都的键值对:

截屏2022-05-05 14.28.01

字典最主要的用法是查找与特定键相对应的值,通过索引符号来实现:

截屏2022-05-05 14.29.26

字典是储存可变数量键值对的数据结构,键和值可以是任意数据类型,包括程序自定义的类型。Python字典非常高效,可以存储几十万项的内容。

6.3.2 字典类型的操作

Python字典有着非常灵活的操作方式。使用大括号可以创建字典,并制定初始值,通过中括号可以增加新的元素:

截屏2022-05-05 14.38.00

这里需要注意,尽管集合类型也用大括号,但直接使用大括号是生成字典而不是集合,生成空集合需要使用函数set()

在Python内部,字典采用面向对象方式实现,此外还有一些函数能够用于操作字典:

截屏2022-05-05 14.40.52

字典是现实键值对映射的数据结构,它采用固定数据类型的键数据作为索引,十分灵活,具有处理任意长、混合类型键值对的能力。为了更好地认识并使用字典,需理解如下的一些基本原则:

  1. 字典是一个键值对的集合,以键为索引,一个键只能对应一个值;
  2. 字典中元素以键信息为索引访问;
  3. 字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。

6.4 jieba库的使用

6.4.1 jieba库概述

对于一段英文文本,例如“China is a great country”,如果提取其中的单词,只需要使用字符串处理的split()方法即可。

截屏2022-05-05 15.06.06

但是对于中文文本,需要使用专门的库来进行分词,jieba库是第三方库,不是Python自带的,因此需要使用pip指令进行安装:

pip install jieba
pip3 install jieba

这是一个利用中文词库进行分词的,将待分词的内容与分词词库进行对比,通过图结构和动态规划方法,找到最大概率的词组。这个库支持三种分词模式:

  1. 精确模式:将句子最精确地切开,适合文本分析;
  2. 全模式:将句子中所有可以成词的词语都扫描出来,速度快但不能消除歧义;
  3. 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

6.4.2 jieba库解析

截屏2022-05-05 15.38.31

jieba库提供主要函数,可以辅助自定义分词词典。

截屏2022-05-05 15.54.45

  1. jieba.lcut() 精确模式,输出的分词能够完整且不多余地组成原始文本;
  2. jieba.lcut(,True)使用全模式,输出原始文本中可能产生的所有问题,冗余量最大;
  3. jieba.lcut_for_search()使用搜索引擎模式,限制性精确模式,然后再对其中的长词进一步切分获得结果。

此外jieba库还拥有更丰富的分词功能,涉及自然语言处理领域。


第七章 文件和数据格式化


7.1 文件的使用

7.1.1 概述

文件是一个储存在存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合与抽象,类似的,函数是程序的集合与抽象。用文件形式组织和表达数据更有效也更为灵活,文件包括两种类型:文本文件和二进制文件。

文本文件通常由单一特定编码的字符组成,例如最常见的UTF-8编码格式。由于存在编码,因此文本文件可以视为存储在磁盘上的长字符串。

二进制文件由比特0和比特1组成,没有统一字符编码,内部数据的组织格式与文件用途有关。二进制是信息按照非字符但特定格式形成的文件:png图片文件、avi视频文件。

文本文件与二进制文件的区分通常在于是否有统一的字符编码,二进制文件由于没有统一字符编码,只能当做字节流。

7.1.2 文件的打开与关闭

Python对文本文件和二进制文件采用统一的操作步骤,即:打开、操作、关闭。Python通过解释器内置的open()函数打开一个文件,该函数提供其中基本的打开模式:

文件打开的模式含义
‘r’只读模式,如果文件不存在,返回异常FileNotFoundError,默认值
‘w’覆盖写模式,文件不存在则创建,存在则完全覆盖
‘x’创建写模式,文件不存在则创建,存在则返回异常FileExistsError
‘a’追加写模式,文件不存在则创建,存在则在文件最后追加内容
‘b’二进制文件模式
‘r’文本文件模式,默认值
‘+’与r/w/x/a一同使用,在原功能基础上增加同时读写功能

文件使用结束后要调用close()方法关闭,释放文件的使用授权:

<变量名>.close()

7.1.3 文件的读写

文件打开后,根据打开方式对文件进行不同的读写操作。当文件以文本文件方式打开时,读写按照字符串方式,采用当前计算机使用的编码或指定编码;当文件以二进制文件方式打开时,读写按照字节流方式。Python程序提供了4个常用的文件内容读取方法:

操作方式含义
.readall()读入整个文件内容,返回一个字符串或字节流(与文件打开方式有关)
.read(size= -1)从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流
.readline(size= -1)从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字节流
.readlines(hint= -1)从文件读入所有行发,以每行为元素形成一个列表,如果给出参数,读入hint行

例子:文本文件逐行打印

fname = input("请输入要打开的文件:")
fo = open(fname, "r")
for line in fo:
    print(line)
fo.close()

截屏2022-05-05 17.11.20

Python还提供了三个与文件内容写入相关的方法:

方法含义
.write(s)向文件写入一个字符串或字节流
.writelines(lines)将一个元素全为字符串的列表写入文件
.seek(offset)改变当前文件操作指针的位置,offset的值:0 文件开头;1当前位置;2文件结尾

例子:向文件写一个列表类型,并打印输出结果:

fname = input("请输入要写入的文件:")
fo = open(fname, "w+")
ls = ["1","2","3"]
fo.writelines(ls)
for line in fo:
    print(line)
fo.close()

截屏2022-05-05 17.17.07


7.2 一二纬数据的格式化和处理

7.2.1 数据组织的纬度

一维数据由对等关系的有序或无序数据构成,采用线性的方式组织,对应用于数学中的数组和集合等概念。无论采用任何方式分隔和表示,一维数据都具有线性特点。

二维数据也称作表格数据,由关联关系数据构成,采用表格方式组织,对应用于数学中的矩阵,常见的表格都属于二维数据。

高维数据由键值对类型的数据构成,采用对象方式组织,属于整合度更好的数据组织方式。高维数据在网络系统中十分常用:HTML、XML、JSON等都属于高维数据组织的语法结构。相对比于一维和二维数据能表达更加灵活和复杂的数据关系。

数据包括文件存储和使用两个状态,对于数据处理,需要考虑存储个事以及表示和读写等两个问题。

7.2.2 一二维数据的存储格式

一维数据是最贱的数据组织类型,有多种存储格式,常用特殊字符分隔:

  1. 用一个或多个空格;
  2. 用英文逗号分隔;
  3. 用其他符号或符号组合分隔,建议采用不出现在数据中的特殊符号;

二维数据有多条一维数据构成,常用逗号分隔值文件(CSV格式)进行存储。在商业和科学上有着广泛应用,尤其是应用程序在不同程序之间转移表格数据。该格式的应用有如下的一些基本规则:

  1. 纯文本格式,通过单一编码表示字符;
  2. 以行为单位,开头不留空行,行之间没有空行;
  3. 每行表示一个一维数据,多行表示二维数据;
  4. 以英文逗号分隔每列数据,列数据为空也要保留逗号;
  5. 对于表格数据,可以包含或不包含列名,包含列名时需放置在文件第一行。

7.2.3 一二维数据的表示和读写

读取:

fo = open("test.csv","r")
ls = []
for line in fo:
    line = line.replace("\n","")
    ls.append(line.split(","))
print(ls)
fo.close()

需要注意:每一行结束的时候还包含了一个换行符。

写入:

fo = open("test.csv","w")
ls = ["苏联","莫斯科","列宁格勒","斯大林格勒"]
fo.write(",".join(ls)+"\n")
fo.close()

截屏2022-05-05 17.52.16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值