码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 北理工嵩天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}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7.1.2 集合操作符

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

    7.1.3 集合处理方法

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

    try:
        while True:
        	print(A.pop(), end="")
    except: 
    	pass
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7.1.4 集合类型应用场景

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

    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'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 元组继承了序列类型的全部通用操作
    • 元组因为创建后不能修改,因此没有特殊操作

    7.2.4 列表类型及操作

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

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

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

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

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

    • List sort()方法

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    7.4字典类型及操作

    7.4.1 字典类型定义

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

    7.4.2 字典处理函数及方法

    在这里插入图片描述

    >>>d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
    >>>"中国"in d 
    True
    >>>d.keys()
    dict_keys(['中国', '美国', '法国'])
    >>>d.values()
    dict_values(['北京', '华盛顿', '巴黎'])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    >>>d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
    >>>d.get("中国","伊斯兰堡")
    '北京'
    >>>d.get("巴基斯坦","伊斯兰堡")
    '伊斯兰堡' 
    >>>d.popitem()
    ('美国', '华盛顿')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    面试必备:HashMap底层源码原来是这么简单(分析)
    浏览器缓存 四种缓存分类 两种缓存类型
    人大金仓分析型数据库备份和恢复(三)
    信创加速,美创科技加入UOS主动安全防护计划(UAPP)
    手机兼容性测试
    在自己电脑上的idea运行java web项目 如何用外网访问
    【无标题】
    【java养成】:main函数中String[] args的作用、商品入库案例、猜数字游戏、随机点名器
    【校招VIP】java语言考点之反射
    C++ RAII在HotSpot VM中的重要应用
  • 原文地址:https://blog.csdn.net/yyywxk/article/details/127692292
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号