Professional Documents
Culture Documents
Python第6 组合数据类型
Python第6 组合数据类型
Python Programming
第 6 章 组合数据类型
第 6 章 Python 的组合数据类型
本章学习目标:
了解 3 类基本组合数据类型
理解列表的概念并掌握 python 中列表的使用
列表
元组
理解字典的概念并掌握 python 中字典的使字典
运用列表管理采集的信息,构建数据结构
运用字典处理复杂的数据信息
运用组合数据类型进行文本词频统计
基本数据类型
Python3 中有六个标准的数据类型:
Numbers (数字类型)
Strings (字符串类型 str )
Lists (列表类型 list )
Tuples (元组类型 tuple )
Dictionaries (字典类型 dict )
Sets (集合类型 set )
6.1 组合数据类型概述
要点:组合数据类型能够将多个同类型或不同类型的数据组织起来,通过
单一的表示使数据操作更有序更容易。根据数据之间的关系,组合数据类
型可以分为三类:
• 序列类型、集合类型和映射类型。
• 序列类型是一个元素向量,元素之间存在先后关系,通过序号访问,元素
之间不排他。
• 集合类型是一个元素集合,元素之间无序,相同元素在集合中唯一存在。
• 映射类型是“键 - 值”数据项的组合,每个元素是一个键值对,表示为
(key,value) 。
6.1.1 序列类型
序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。
其基本思想和表示方法来源于数学概念。
S=s0,s1,s2………….sn-1
6.1.1 序列类型
• 序列类型包括列表、元组和字符串等三种。
• 序列类型支持成员关系操作符 (in) 、分片运算符 ([ ]) , len( ), 序列中的元素也
还可以是序列类型。
• 单一字符串只表达一个含义,也被看作是基本数据类型。
• 元组 ( ) 是包含 0 个或多个数据项的不可变序列类型。元组生成后是固定的,其
中任何数据项不能替换或删除。
• 列表 [ ] 则是一个可以修改数据项的序列类型,使用也最灵活。
序列类型的通用操作符和函数
操作符或函数 功能描述
x in s 如果 x 是 s 的元素返回 True ,否则返回 False
x not in s 如果 x 不是 s 的元素返回 True ,否则返回 False
s+t 返回 s 和 t 的连接
s*n 将序列 s 复制 n 次
s[i] 索引,返回序列的第 i 个元素
s[i:j] 分片,返回包含序列 s 第 i 到 j 个元素的子序列 ( 不包含第 j 个
元素 )
s[i:j:k] 返回包含序列 s 第 i 到 j 个元素以 k 为步长的子序列
len(s) 返回序列 s 的元素个数 ( 长度 )
min(s) 返回序列 s 中的最小元素
max(s) 返回序列 s 中的最大元素
元组类型( tuple )
• 元组( tuple )与列表类似,也是一种序列数据类型。
• 元组是不可变类型,其元素不能修改。
• 元组中的元素是有序可重复的
• 元组中元素类型可以不相同。
• 元组写在小括号 ( ) 里,元素之间用逗号 , 隔开。
例如:
元组只有一个
元素,末尾也
需要加逗号。
元组类型( tuple )的使用
• 函数的多返回值
• 多变量同步赋值
• 循环的遍历
例如:
3)
1 ) def fun(x,y):
return x+y,x-y;
2)>>>a,b="dog","tiger"
>>>a,b=b,a
• tuple 与 list 之间的转换
6.1.2 集合类型
• 举例如下:
集合的处理方法
集合的使用
• 集合主要用于 3 个场景:
• 成员测试、元素去重、删除数据项。如:
## 将元组转化为集合,也就达到去重的目的
## 将集合转化为元组
6.1.3 映射类型(字典类型 )
- 映射是一种键 ( 索引 ) 和值 ( 数据 ) 的对应
键( key )表示属性,也可以理解为一个类别或项目。
值( value) 是属性的内容。
键值对刻画了一个属性和值,键值对经映射关系结构化,用于存储和表达。
6.2 列表类型和操作 ( 重点)
列表里第一个元素的“位置”或者“索引”是从“ 0” 开始,第二个元
素的则是“ 1” ,以此类推。
在创建列表时,列表元素放置在方括号 [ ] 中,以逗号来分隔各元素,
格式如下:列表没有长度限制可以自由增删元素。
listname = [ 元素 1, 元素 2, 元素 3, ……, 元素 n]
sample_list1 = [0, 1, 2, 3, 4]
sample_list2 = ["P", "y", "t", "h", "o", "n"]
sample_list3 = ['Python', 'sample', 'list', 'for', 'your', 'reference']
对列表的元素进行修改时,可以使用赋值语句:
>>> sample_list3 = ['python', 'sample', 'list', 'for', 'your', 'reference']
>>> sample_list3[4] = ‘my‘
>>> print ("sample_list3[4]:", sample_list3[4])
sample_list3[4]: my
>>> print ("sample_list3:", sample_list3)
sample_list3: ['python', 'sample', 'list', 'for', 'my', 'reference']
注意: 字符串里的字符不可以用这种方式修
改
元组可以用这种方式
修改元素么?
×
使用列表
# 初始化 3 个列表
>>> lst2=["python", 12, 2.71828, [0,0], 12]
>>> lst3=[21, 10, 55, 100, 2]
>>> lst=['aaa','bbb']
>>> lst2[2]=3.14 # 替换元素 ['python', 12, 3.14, [0, 0], 12]
>>> lst2[0:3]=lst #['aaa', 'bbb', [0, 0], 12]
# 追加(合并)列表
>>> lst2+=lst3 #['aaa', 'bbb', [0, 0], 12, 21, 10, 55, 100, 2]
>>> del lst2[:3] # 删除 0 , 1 , 2 等 3 个列表元素
删除列表元素
清空列表,可以采用重新创建一个与原列表名相同的空列表的方法,
例如:
listname = []
代码示例如下:
>>> sample_list1 = [0, 1, 2, 3, 4]
>>> len(sample_list1) # 列表的元素数量
5
>>> max(sample_list1) # 列表中元素的最大值
4
>>> min(sample_list1) # 列表中元素的最小值
0
列表类型特有的函数或方法
方法 说明
listname.append( 元素 ) 添加新的元素在列表末尾
listname.count( 元素 ) 统计该元素在列表中出现的次数
listname.extend( lt ) 将列表 lt 追加到原列表中
listname.index( 元素 ) 从列表中找出某个值第一个匹配元素的索引位置
listname.insert( 位置 , 元素 ) 将元素插入列表指定位置
listname.pop ( i ) 移除列表中第 i 项元素,并且返回该元素的值
listname.remove(x) 移除列表中出现的第一个元素 x 删除
listname.reverse() 将列表中元素反向
listname.sort(cmp=None,
key=None, reverse=False) 对列表进行排序
listname.clear() 清空列表
listname.copy() 复制列表
6.2.2 列表类型的操作
• 列表有特有的函数或方法用于完成列表元素的增删改查,其中 ls 、
lst 分别为两个列表, x 是列表中的元素, i 和 j 是列表的索引。
操作符 操作符
ls[i]=x ls.append(x)
ls[i:j]=lst ls.clear()
ls[i:j:k]=lst ls.copy()
del ls[i:j] ls.insert(i,x)
del ls[i:j:k] ls.pop(i)
ls+=lst(ls.extend(lst)) ls.remove(x)
ls*=n ls.reverse(x)
ls.sort()
列表的应用案例 1
输入一个长度任意的字符串反转输出。
要求:请使用 list 函数, join 函数和 reverse 函数。
算法思路:
join 函数的用法
字符串
list 函数 s1=insert_string.join(list1)
列表 (reverse() ) 例如: s1 = "$$$".join( ['H', 'u', 's', 't'] )
执行完之后, s1 为 H$$$u$$$s$$$t
join 函数
思考: ls1="".join(['H','u','s','t'])
字符串 结果怎样?
列表的使用
• 统计字符串中的单词个数。(单词之间用, . ; ? 或空格隔开)
如: str=“I am a girl! I love my country. My name is zhuli.”
算法思路:
1 )将字符串规整化,单词之间都用空格隔开。
str.replace(ch,“ ")
2 )利用空格将字符串转换成列表。
str.split(sep=“ ")
3 )统计列表的元素个数。
len(ls )
6.3 基本统计值的计算
• 输入:从用户、文件、网络等途径获取一组数据
从键盘输入若干需统计的数据,如:
【 1,2,3,4,5,6,7,8,9,10 】
• 处理:适当的数据结构和算法
数据结构:输入时【字符串】——》处理时【列表】
算法:循环遍历列表的每个数据项,分别计算平均值,标准差和中位数
• 输出:平均值、标准差和中位数。
6.3 基本统计值的计算
使用函数方式编写程序,定义如下函数:
• getNum ()从用户输入获得数据
• mean ()计算平均值
• dev() 计算标准差
• median() 计算中位数
6.4 字典类型和操作
• - 字典类型定义
• - 字典处理函数及方法
• - 字典类型应用场景
字典类型是“映射”的体现
• - 键值对:键是数据索引的扩展
• - 字典是键值对的集合,键值对之间无序
• - 采用大括号 { } 和 dict() 创建,键值对用冒号 : 表示
{< 键 1>:< 值 1>, < 键 2>:< 值 2>, … , < 键 n>:< 值 n>}
字典的定义和使用
d 被修改
字典操作示例
• 定义空字典 d >>>d={}
• 向 d 新增 2 个键值对元素 >>>d["a"]=1;d["b"]=2
• 计算 d 的长度 >>>len(d)
• 清空 d >>>d.clear()
字典类型应用场景
• 映射无处不在,键值对无处不在
- 例如:统计数据出现的次数,数据是键,次数是值
- 最主要作用:表达”键值对”数据,进而操作它们
• 作为遍历结构
for k in d:
< 语句块 >
6.5 jieba 库的使用
一段中文如何统计词汇数量呢?
jieba 库 : 一个重要的第三方中文分词库。
#jieba 库的安装
• -jieba 库提供三种分词模式,最简单只需掌握一个函数 .
• 利用一个中文词库,确定中文字符之间的关联概率
• - 中文字符间概率大的组成词组,形成分词结果
• - 除了分词,用户还可以添加自定义的词组
jieba 库常用函数
6.6 文本词频统计
单词出现次数:
• 问题描述
- 需求:一篇文章,出现了哪些词?哪些词出现得最多?
- 该怎么做呢?
• 英文文本 VS 中文文本
- 使用字典表达词频
英文词频统计
hamletTxt= getText()
words = hamletTxt.split()
If word in counts:
counts = {}
counts[word]=counts[word]+1
for word in words: ese:
counts[word] = counts.get(word,0) + 1 counts[word]=1
items = list(counts.items())
items.sort(key=lambda x : x[1], reverse=True)
for i in range(10):
word, count = items[i]
print("{0:<10}{1:>5}".format(word, count))
中文词频统计
import jieba
txt = open("threekingdoms.txt", "r", encoding="utf-8").read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1: continue ## 排除单个字的分词
else:
counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambdax:x[1], reverse=True)
for i in range(15):
word, count = items[i]
print("{0:<10}{1:>5}".format(word, count))
小结
• 序列操作的运算符和函数。
• 根据不同组合数据类型特点,介绍了循环遍历、增删改查、排序等内容。
• 列表是一种常见的数据结构,是一种 序列结构。
• 元组是无法修改的,其重点在于增删查操作。(扩展)
• 字典是 Python 中内置的映射类型,由 key-value 的键值对组成,通过
key 可以找到其映射的值 value 。(扩展)
• 字典的增删改查、遍历。(扩展)
作业