美文网首页
# Python -07 组合数据类型

# Python -07 组合数据类型

作者: 丿小七 | 来源:发表于2018-06-06 09:24 被阅读13次

    集合类型

    集合是多个元素的无序组合
    集合类型与数学中的集合概念一致
    集合元素之间无序,每个元素唯一,不存在相同元素

       # 集合用大括号{}表示,元素间用逗号分隔
       # 建立集合类型用{}或set()
       # 建立空集合类型,必须使用set()
       A = {"1", "123", ("3", "8")}
       B = set("pypy123")
       >>> {"p", "y", "1", "2", "3"}
    
    • 集合操作符
       S|T 并 返回一个新的集合 包括在集合S和T中的所有元素
       S-T 差 返回一个新的集合 包括在集合S但不在T中的元素
       s&T 交 返回一个新的集合 包括同时在集合S和T中的元素
       S^T 补 返回一个新的集合 包括集合S和T中的非相同元素
       
    # 4个增强操作符
       S |= T 更新集合S 包括在集合S和T中的所有元素
       S -= T 更新集合S 包括在集合S但不在T中的元素
       S &= T 更新集合S 包括同时在集合S和T中的元素
       S ^= T 更新集合S 包括集合S和T中的非相同元素
    
    • 集合处理方法
       S.add(x) 如果x不在集合S中,将x增加到S
       S.discard(x) 移除S中元素x,如果x不在集合S中,不报错
       S.remove(x) 移除S中元素x,如果x不在集合S中,产生KeyError异常
       S.clear() 移除S中所有元素
       S.pop() 随机返回S的一个元素,更新S,若S为空产生KeyError异常
       S.copy() 返回集合S的一个副本
       len(S) 返回集合S的元素个数
       X in S 判断S中元素x, x在集合S中,返回
       True,否则返回False
       set(x) 将其他 类型变量x转变为集合类型
    
    • 应用场景
      • 包含关系比较
      • 数据去重

    序列类型

    序列是具有先后关系的一组元素
    序列是一个基类类型

        # 序列是一维向量,元素类型可以不同
        # 类似数学元素序列:S0, S1, ..., Sn-1
        # 元素间由序号引导,通过下标访问序列的特定元素
    
    • 序列类型及操作
       x in s 如果x是序列s的元素,返回True,否则返回False
       x not in s 如果x是序列s的元素,返回False,否则返回True
       s + t 连接两个序列s和t
       s * n 或 n * s 将序列s复制n次
       s[i] 索引,返回s中的第i个元素,i是序列的序号
       s[i:j] 或 s[i:j:k] 切片,返回序列s中第i到j以k为步长的元素子序列
    
    • 序列类型通用函数和方法
        len(s) # 返回序列s的长度
        min(s) # 返回序列s的最小元素,s中元素需要可比较
        max(s) # 返回序列s的最大元素,s中元素需要可比较
        s.index(x) 或 s.index(x,i,j) # 返回序列s从i开始到j位置中第一次出现元素x的位置
        s.count(x) # 返回序列s中出现x的总次数
    

    元组

    • 元组是序列类型的一种扩展
    • 元组继承序列类型的全部通用操作
        元组是一种序列类型,一旦创建就不能被修改
        使用小括号()或tuple()创建,元素间用逗号分隔
        可以使用或不使用小括号
        元组因为创建后不能修改,因此没有特殊操作
    

    列表

    • 列表是序列类型的一种扩展,十分常用
    • 列表是一种序列类型,创建后可以随意被修改
        列表使用[]或list()创建,元素间用逗号分隔
        可以使用或不使用小括号
        ls = ["cat", "dog", "tiger", 1024]
        
        ls[i] = x 替换列表ls第i元素为x
        ls[i:j:k] = lt 用列表lt替换ls切片后对应元素子列表
        del ls[i] 删除列表ls中第i元素
        del ls[i:j:k] 删除列表ls中第i到第j以k为步长的元素
        ls += lt 更新列表ls, 将列表lt元素增加到列表ls中
        ls *= n 更新列表ls, 其元素重复n次
    

    序列类型应用场景

    • 元组用于元素不改变的应用场景,更多用于固定搭配场景
    • 列表更加灵活, 他是最常用的序列类型
    • 最主要作用:表示一组有序数据,进而操作他们
    • 元素遍历
    • 数据保护,如果不希望数据被程序所改变,转换为元组类型

    字典类型

    映射:映射是一种键(索引)和值(数据)的对应
    字典类型是映射的体现

        键值对:键是数据索引的扩展
        字典是键值对的集合,键值对之间无序
        采用{}和dict()创建,键值对用冒号:表示
        d = {"中国":"湖南", "名字":"小七"}
    
    • 字典类型操作函数喝方法

          del d[k] 删除字典d中键对应的数据值
          k in d 判断键k是否在字典d中,如果在返回True,否则返回False
          d.keys() 返回字典d中所有的键信息
          d.values() 返回字典d中所有的值信息
          d.items() 返回字典d中所有的键值对信息
          
          d.get(k, <default>) 键k存在,则返回相应值,不在则返回<default>值
          d.pop(k, <default>) 键k存在,则取出相应值,不在则返回<default>值
          d.popitem() 随机从字典d中取出一个键值对,以元组形式返回
          d.clear() 删除所有键值对
          len(d) 返回字典d中元素的个数
      

    jieba库

    jieba库是优秀的中文分词第三方库

        cmd命令行: pip install jieba
    

    利用一个中文词库,确定汉字之间的关联概率

    • 精确模式

    把文本精确的切分开,不存在冗余单词

    • 全模式

    把文本中所有可能的词语都扫描出来,有冗余

    • 搜索引擎模式

    在精确模式基础上,对长词再次切分

    函数 描述
    jieba.lcut(s) 精确模式,返回一个列表类型的分词结果 jieba.lcut(“中国是一个伟大的国家")==>[“中国”, ‘是’, “一个”, “伟大”, “的”, “国家"]
    jieba.lcut(s,cut_all=True) 全模式,返回一个列表类型的分词结果,存在冗余 jieba.lcut(“中国是一个伟大的国家”, cut_all=True)==>[“中国”, “国是”, “一个”, “伟大”, “的”, “国家"]
    jieba.lcut_for_search(s) 搜索引擎模式,返回一个列表类型的分词结果,存在冗余 jieba.lcut_for_search(“中华人民共和国是伟大的”)==>[“中华”, “华人”, “人民”, “共和”, “共和国”, “中华人民共和国", "是", "伟大", "的"]
    jieba.add_word(w) 向分词词典增加新词w jieba.add_word("蟒蛇语言")
    jieba.lcut("中国是一个伟大的国家")
    # [“中国”, ‘是’, “一个”, “伟大”, “的”, “国家"] 
    
    jieba.lcut("中国是一个伟大的国家", cut_all = True)
    # [“中国”, “国是”, “一个”, “伟大”, “的”, “国家"]
    
    jieba.lcut_for_search("中华人民共和国是伟大的")
    # [“中华”, “华人”, “人民”, “共和”, “共和国”, “中华人民共和国", "是", "伟大", "的"]
    
    jieba.add_word("蟒蛇语言")
    # 增加新词
    
    

    文本词频统计

    # 文本词频统计
    import sys
    
    def getText():
        txt = open("hamlet.txt", "r").read() 
        # 打开文本文件,测试可以使用txt='''很长的文本内容,英文类型的文本代替'''
        # 使用PyCharm工具编译
        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)
    for i in range(10):
        word, count = items[i]
        print("{0:<10}{1:>5}".format(word, count))
    

    Pycharm安装:PyCharm安装激活

    运行结果


    屏幕快照 2018-06-06 18.10.23.png

    PyInstaller库

    .py源代码转换成无需源代码的可执行文件

    参数 描述
    -h 查看帮助
    --clean 清理打包过程中的临时文件
    -D, --onedir 默认值,生成dist文件夹
    -F, --onefile 在dist文件夹中生成独立的打包文件
    -i<图标文件名.ico> 指定打包程序使用的图标icon文件

    相关文章

      网友评论

          本文标题:# Python -07 组合数据类型

          本文链接:https://www.haomeiwen.com/subject/zqgvsftx.html