北理工嵩天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集合类型的定义

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

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

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

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

  • 建立集合类型用{} 或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 nums


def mean(numbers):  # 计算平均值
    s = 0.0
    for num in numbers:
        s = s + num
    return s / len(numbers)


def dev(numbers, mean):  # 计算方差
    sdev = 0.0
    for num in numbers:
        sdev = sdev + (num - mean) ** 2
    return 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]) / 2
    else:
        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 txt


hamletTxt = 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 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=lambda x: x[1], reverse=True)
for i in range(15):
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word, count))

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

import jieba

txt = open("threekingdoms.txt", "r", encoding="utf-8").read()
excludes = {"将军", "却说", "荆州", "二人", "不可", "不能", "如此"}
words = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:
        continue
    elif word == "诸葛亮" or word == "孔明曰":
        rword = "孔明"
    elif word == "关公" or word == "云长":
        rword = "关羽"
    elif word == "玄德" or word == "玄德曰":
        rword = "刘备"
    elif word == "孟德" or word == "丞相":
        rword = "曹操"
    else:
        rword = word
    counts[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))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值