Python 语言程序设计(6-1)组合数据类型--集合 *** 作符

Python 语言程序设计(6-1)组合数据类型--集合 *** 作符,第1张

集合 :  多个元素的无序组合

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

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

-集合元素不可更改,不可是可变数据。即集合中的元素不能被修改 。

集合的类型定义:

- 集合使用打括号表示{},元素间用逗号分割;

- 建立集合类型用{}或者set()函数

-建立空集合必须使用set()函数

重点

--集合中的每个元素唯一,不存在相同的元素。

--元素之间无序。

集合 *** 作符

集合间的 *** 作,主要包含  并,差,交,补。

 对于集合的关系运算

 

集合的处理方法:

- S.add(x)  : 如果x不在集合S中,将x增加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  ,判断x是否在集合S中,返回True  ,否则返回False。

- x not in S  ,判断x不在在集合S中,返回True  ,否则返回False。

- set(x)  将其他类型的变量转换成集合类型

以上的S 都为一个具体的集合S。

集合类型及 *** 作

集合类型 *** 作的最重要的作用就是判断数据是否存在重复,及去重处理

ls=["p","p","y","y","123"]
s=set(ls)  ##去除列表中的重复
lt=list(s)  ##重新将集合变成列表

对于集合的定义处理和  应用场景

 序列类型和 *** 作

序列是一类具有先后关系的一组元素,因此,序列中的元素可以相同,也可以不同。

关于序列的 *** 作处理

序列顾名思义,具有序号,反向递减或者正向递增。

 字符串的通用函数和方法

 元组类型定义

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

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

- 可以使用或者不使用小括号

 元组的索引

 列表类型及定义

列表类型及 *** 作函数

 

列表类型 *** 作函数和方法

 序列类型的应用

 

 

 数据的基本统计值

 循环获得用户输入的数据

平均数计算

 计算方差

 

 

 基本统计数的计算

 

字典类型定义

 字典是一组键值对的表现,是一一映射的关系。

 

 type()函数来检测x的类型

 字典键值对的 *** 作

- del d[k] 删除字典d中键k 对应的值

- k in d  判断键k 是否在字典d 中,如果在,返回True,否则返回False

- d.keys() 返回字典d中所有的键信息

- d.values() 返回字典d 所有的值信息

- d.items() 返回字典d中所有的键值对信息

- d.get(k,)  键k存在,则返回相应值,不存在则返回

- d.pop(k,)  键k存在,则取出相应值,并删除相应的键值对,不在则返回

- d.popitem()  随机从字典d中取出一个键值对,以元组的形式返回

- d.clear()  删除所有的键值对

- len(d) 返回字典d 中元素的个数

 

 

jieba 库的使用

-jieba库是一个优秀的中文分词第三方库。通过中文词库的方式来确定汉字之间的关联概率。

使用hamlet和三国演义的文本进行词频统计

文本数据来源

英文文本 hamlet https://python123.io/resources/pye/hamlet.txt

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

hamlet 词频统计

def getText():
    txt = open("Desktop/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))

中文三国演义人物出场:

import jieba

txt = open("Desktop/threekingdoms.txt", "r", encoding="utf-8").read()  ####注意,此处由于读入##的是中文文本,因此一定要加入文本的编码方式,这里选用的是文本保存时的编码方式UTF-8
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))

上述得到的结果是,但是我们需要的是人物的出场顺序及频率,因此将不相关的词频删除

曹 ***           953
孔明          836
将军          772
却说          656
玄德          585
关公          510
丞相          491
二人          469
不可          440
荆州          425
玄德曰         390
孔明曰         390
不能          384
如此          378
张飞          358

将词频与任务相关联,面向问题。

上述的代码经过修改过后,得到如下代码:

import jieba

txt = open("Desktop/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(30):
    word, count = items[i]
    print("{0:<30}{1:>5}".format(word, count))

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/801109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存