北理工嵩天Python语言程序设计笔记(7 组合数据类型)

前言

本文是对《北理工 嵩天/黄天宇/礼欣 Python语言程序设计》的学习笔记,供自己查阅使用。

文章目录

  1. 北理工嵩天Python语言程序设计笔记(目录)
  2. 北理工嵩天Python语言程序设计笔记(2 Python基本语法元素)
  3. 北理工嵩天Python语言程序设计笔记(3 Python基本图形绘制)
  4. 北理工嵩天Python语言程序设计笔记(4 基本数据类型)
  5. 北理工嵩天Python语言程序设计笔记(5 程序的控制结构)
  6. 北理工嵩天Python语言程序设计笔记(6 函数和代码复用)
  7. 北理工嵩天Python语言程序设计笔记(7 组合数据类型)
  8. 北理工嵩天Python语言程序设计笔记(8 文件和数据格式化)
  9. 北理工嵩天Python语言程序设计笔记(9 程序设计方法学)
  10. 北理工嵩天Python语言程序设计笔记(10 Python计算生态概览)

笔记目录

  • 前言
  • 文章目录
  • 7 组合数据类型
    • 7.1 集合类型及操作
      • 7.1.1集合类型的定义
      • 7.1.2 集合操作符
      • 7.1.3 集合处理方法
      • 7.1.4 集合类型应用场景
    • 7.2序列类型及操作
      • 7.2.1 序列类型定义
      • 7.2.2 序列处理函数及方法
      • 7.2.3 元组类型及操作
      • 7.2.4 列表类型及操作
      • 7.2.5序列类型应用场景
    • 7.3 实例9: 基本统计值计算
    • 7.4字典类型及操作
      • 7.4.1 字典类型定义
      • 7.4.2 字典处理函数及方法
      • 7.4.3 字典类型应用场景
    • 7.5 模块5: jieba库的使用
      • 7.5.1 jieba库基本介绍
      • 7.5.2 jieba分词的原理
      • 7.5.3 jieba库使用说明
    • 7.6 实例10: 文本词频统计
      • 7.6.1 Hamlet英文词频统计
      • 7.6.2 《三国演义》人物出场统计"实例


7 组合数据类型

7.1 集合类型及操作

7.1.1集合类型的定义

  • 集合类型与数学中的集合概念一致

  • 集合元素之间无序,每个元素唯一,不存在相同元素

  • 集合元素不可更改,不能是可变数据类型

  • 集合用大括号{} 表示,元素间用逗号分隔

  • 建立集合类型用{} 或set()

  • 建立空集合类型,必须使用set(),{}无法生成空集合,因为它生成了空字典

>>>A = {"python", 123, ("python",123)}  #使用{}建立集合
{123, 'python', ('python', 123)}
>>>B = set("pypy123")         #使用set()建立集合
{'1', 'p', '2', '3', 'y'}
>>>C = {"python", 123, "python",123}
{'python', 123}

7.1.2 集合操作符

在这里插入图片描述
在这里插入图片描述

7.1.3 集合处理方法

在这里插入图片描述
在这里插入图片描述

try:while True:print(A.pop(), end="")
except: pass

7.1.4 集合类型应用场景

  • 数据去重:集合类型所有元素无重复
>>>ls = ["p", "p", "y", "y", 123]
>>>s = set(ls)    # 利用了集合无重复元素的特点
{'p', 'y', 123}
>>>lt= list(s)   # 还可以将集合转换为列表
['p', 'y', 123]

7.2序列类型及操作

7.2.1 序列类型定义

  • 序列是一维元素向量,元素类型可以不同

  • 元素间由序号引导,通过下标访问序列的特定元素

  • 字符串类型、元组类型、列表类型

7.2.2 序列处理函数及方法

  • 序列类型通用操作符
    在这里插入图片描述
    在这里插入图片描述

7.2.3 元组类型及操作

  • 元组是一种序列类型,一旦创建就不能被修改

  • 使用小括号() 或tuple() 创建,元素间用逗号, 分隔

  • 可以使用或不使用小括号

>>>creature = "cat", "dog","tiger","human"
>>>creature 
('cat', 'dog', 'tiger', 'human')
>>>color = (0x001100, "blue", creature)
>>>color
(4352, 'blue', ('cat', 'dog', 'tiger', 'human'))
  • 元组继承了序列类型的全部通用操作
  • 元组因为创建后不能修改,因此没有特殊操作

7.2.4 列表类型及操作

  • 列表是一种序列类型,创建后可以随意被修改

  • 使用方括号[] 或list() 创建,元素间用逗号, 分隔

  • 列表中各元素类型可以不同,无长度限制

  • sorted(ls):按递增顺序排序,列表被改变

  • 在这里插入图片描述
    在这里插入图片描述

  • List sort()方法

list.sort(cmp=None, key=None, reverse=False)

cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。

key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。

7.2.5序列类型应用场景

数据保护:如果不希望数据被程序所改变,转换成元组类型

7.3 实例9: 基本统计值计算

def getNum():  # 获取用户不定长度的输入nums = []iNumStr = input("请输入数字(回车退出): ")while iNumStr != "":nums.append(eval(iNumStr))iNumStr = input("请输入数字(回车退出): ")return numsdef mean(numbers):  # 计算平均值s = 0.0for num in numbers:s = s + numreturn s / len(numbers)def dev(numbers, mean):  # 计算方差sdev = 0.0for num in numbers:sdev = sdev + (num - mean) ** 2return pow(sdev / (len(numbers) - 1), 0.5)def median(numbers):  # 计算中位数sorted(numbers)size = len(numbers)if size % 2 == 0:med = (numbers[size // 2 - 1] + numbers[size // 2]) / 2else:med = numbers[size // 2]return med

7.4字典类型及操作

7.4.1 字典类型定义

  • 键值对:键是数据索引的扩展
  • 字典是键值对的集合,键值对之间无序
  • 采用大括号{}和dict()创建,键值对用冒号: 表示
    {<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>}
>>>d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
>>>d 
{'中国': '北京', '美国': '华盛顿', '法国': '巴黎'}
>>>d["中国"]
'北京'
>>> de = {} ; type(de) # 空字典
<class 'dict'>

7.4.2 字典处理函数及方法

在这里插入图片描述

>>>d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
>>>"中国"in d 
True
>>>d.keys()
dict_keys(['中国', '美国', '法国'])
>>>d.values()
dict_values(['北京', '华盛顿', '巴黎'])

在这里插入图片描述

>>>d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
>>>d.get("中国","伊斯兰堡")
'北京'
>>>d.get("巴基斯坦","伊斯兰堡")
'伊斯兰堡' 
>>>d.popitem()
('美国', '华盛顿')

7.4.3 字典类型应用场景

元素遍历
for k in d:
<语句块>

7.5 模块5: jieba库的使用

7.5.1 jieba库基本介绍

  • 中文文本需要通过分词获得单个的词语
  • jieba是优秀的中文分词第三方库,需要额外安装
  • jieba库提供三种分词模式,最简单只需掌握一个函数

7.5.2 jieba分词的原理

  • 利用一个中文词库,确定中文字符之间的关联概率
  • 中文字符间概率大的组成词组,形成分词结果
  • 除了分词,用户还可以添加自定义的词组

7.5.3 jieba库使用说明

  • 精确模式:把文本精确的切分开,不存在冗余单词
  • 全模式:把文本中所有可能的词语都扫描出来,有冗余
  • 搜索引擎模式:在精确模式基础上,对长词再次切分
  • 在这里插入图片描述
    在这里插入图片描述

7.6 实例10: 文本词频统计

  • 文本去噪及归一化

  • 使用字典表达词频

  • 文本词频统计

    • 英文文本:Hamet
      分析词频
      https://python123.io/resources/pye/hamlet.txt
    • 中文文本:《三国演义》分析人物
      https://python123.io/resources/pye/threekingdoms.txt

7.6.1 Hamlet英文词频统计

def getText():txt = open("hamlet.txt", "r").read()txt = txt.lower()for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':txt = txt.replace(ch, " ")return txthamletTxt = getText()
words = hamletTxt.split()
counts = {}
for word in words:counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True) # 按照x的第1(从0开始)个元素排序
for i in range(10):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))

7.6.2 《三国演义》人物出场统计"实例

import jiebatxt = open("threekingdoms.txt", "r", encoding="utf-8").read()
words = jieba.lcut(txt)
counts = {}
for word in words:if len(word) == 1:continueelse:counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
for i in range(15):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))

将词频与人物相关联,面向问题

import jiebatxt = open("threekingdoms.txt", "r", encoding="utf-8").read()
excludes = {"将军", "却说", "荆州", "二人", "不可", "不能", "如此"}
words = jieba.lcut(txt)
counts = {}
for word in words:if len(word) == 1:continueelif word == "诸葛亮" or word == "孔明曰":rword = "孔明"elif word == "关公" or word == "云长":rword = "关羽"elif word == "玄德" or word == "玄德曰":rword = "刘备"elif word == "孟德" or word == "丞相":rword = "曹操"else:rword = wordcounts[rword] = counts.get(rword, 0) + 1
for word in excludes:del counts[word]
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))


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部