Python_note6 组合数据类型+jieba库+文本词频统计

本文深入探讨了数据结构的基本概念,包括集合、序列、字典等类型的特点及操作,详解了列表、元组、字符串的特性与应用场景,并介绍了字典的高级操作。此外,还涉及了Python编程中的集合与序列的综合运用案例,如文本词频统计和三国人物出场统计,展示了如何利用集合、序列和字典进行高效的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合类型和操作
  • 集合元素不可修改,由不可变数据类型组成,元素不可重复
    a = {"python",123,("python",123)}使用{}建立集合
    b = set("pypy123")使用set建立集合 自动去重
  • 大括号表示,元素逗号隔开,无重复,元素无序
  • 集合操作符
    S | T 返回集合,ST中所有
    S - T 返回集合,在S不在T
    S & T 返回集合,同时在S和T
    S ^ T 返回集合,S和T中非相同元素
    S <= T或S < T 返回True/False,判断S和T子集关系
    S >= T或S > T 返回True/False,判断S和T包含关系
    S |= T就会更新S,[四个增强操作符]
  • 集合处理方法
    S.add(x)S.discard(x)x不存在不报错;S.remove(x)x不存在就报错
    S.clear()移除所有;S.pop()随机取出S的一个元素,更新S,若S空则KeyError
    S.copy()返回集合S的一个副本;len(S)返回个数;x in Sx在集合中True否则False
    set(x)其他类型变量转变为集合类型;x not in S
try:
	while True:
		print(A.pop(),end="")#为空返回error被except捕捉
except:
	pass		
  • 集合类型应用【包含关系比较】【数据去重
ls = ["p","p","y",123]
s=set(ls)#集合元素无重复
lt=list(s)#集合转换为列表
序列类型和操作
  • 序列是具有先后关系的一组元素,元素可以相同且元素类型可以不同,一维,基类类型
  • 序列类型通用操作符
    x in s返回True/False;x not in ss + t 连接序列
    s*nn*s序列s复制n次;s[i]索引;s[i:j]s[i:j:k]切片
  • 5个函数和方法
    len(s)返回序列s长度;min(s)s中元素需要可比较;max(s)s.count(x)
    s.index(x)s.index(x,i,j)返回s从i到j位置第一次出现元素x的位置
字符串类型
元组类型
  • 序列类型的扩展,一旦创建不被修改。使用小括号()tuple()创建,元素间逗号分隔。可以使用或不使用();如return 1,2返回的其实是一个元组类型值
  • 元组内元组可用s[i][j]访问, 列表转元组,保护数据
列表类型
  • 序列类型扩展,创建后可随意修改。使用方括号[]list()创建,逗号分隔。
  • 若未用[]或list()真实创建,赋值只是起了一个别名
  • 列表类型操作函数和方法
    ls[i] = x替换元素;ls[i:j:k]=lt用列表lt替换ls切片后所对应元素子列表
    del ls[i]删除;del ls[i:j:k]删除步长元素;ls+=lt;ls *= n重复
    ls.append(x);ls.clear;ls.copy();ls.insert(i,x);ls.pop(i);ls.remove(x);ls.reverse()
  • 定义空列表lt = [];新增5个元素lt += [1,2,3,4,5];修改lt第二元素lt[2] = 6;第二位置增加一个元素lt.insert(2,7);删除第一位元素del lt[1];删除第1-3位元素del lt[1:4];是否包含数字00 in lt;新增数字0lt.append(0);返回数字0索引lt.index(0);长度len(lt);最大元素max(lt);清空ltlt.clear()
实例9:基本统计值计算

总个数:len();求和:for ... in;平均值:求和/总个数;方差;中位数(用到sorted()函数)

def getNum():
	nums = []
	iNumStr = input("请输入数字(回车退出):")
	while iNumStr != "":
		nums.append(eval(iNumStr))
		iNumStr = input("请输入数字(回车退出):")
	return nums
def median(numbers):
	sorted(numbers)
	size = len(numbers)
	if size % 2 == 0:
		med = (number[size//2-1]+number[size//2])/2
	else:
		med = numbers[size//2]
	return med
字典类型和操作
  • 字典是键值对的集合,键值对之间无序,采用**{}**和()创建,键值对用 表示
  • del d[k]删除d中键k对应的数据值;k in d判断键k是否在d中;d.keys()所有键;d.values()所有值得到的结果可用for in遍历却不是列表;d.items()所有键值对;d.get(k,<default>)键k存在返回相应值否则返回default;d.pop(k,<default>)键k存在取出相应值不在返回default;d.popotem()随机取出一个键值对以元组形式返回;d.clear()删除所有键值对;len.d()元素个数
  • for k in d遍历;.get()
模块5 jieba库
  • 中文分词第三方库,利用中文词库确定汉字关联频率,可添加自定义词库
  • 精确模式不存在冗余单词,全模式扫描所有可能词语,搜索引擎模式(精确模式长词切分);返回列表类型
  • jieba.lcut(s)精确模式;jieba.lcuts(s,cut_all=True)全模式,冗余;jieba.lcut_for_search(s)搜索引擎模式,冗余;jieba.add_word(w)加新词
实例10 文本词频统计

哈姆雷特人物统计

#CalHamlet.py
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:
	count[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))

三国 人物出场统计----集合 序列 字典综合使用

#CalSanGuo.py
import jieba
txt = open("sanguo.txt","r",encoding="utf-8").read()#读入中文文件
excludes = {"将军","却说","荆州","二人","不可","不能","如此"}#优化 在前10出现的非人名去除
words = jieba.lcut(txt)#分隔
count = {}
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#有则得到value并加1,无则返回0加1
for word in excludes:
	del counts[word]#去除非人名
items = list(counts.items())#dict.items()返回可遍历的(键, 值) 元组数组
items.sort(key=lambda x:x[1],reverse=True)#x[1],按每个元组的下标为1的值从小到大排序
for i in range(10):
	word,count = item[i]
	print({0:<10}{1:>5}".format(word,count))

dict.items()返回可遍历的**(键, 值) 元组数组**
列表有自己的sort方法items.sort,对列表进行原址排序,元组不可以使用该方法
y = sorted(x);y列表排了序,x列表保持原样;x.sort()对x列表进行排序,无返回值
key在使用时必须提供一个排序过程总调用的函数
reverse实现降序排序,需要提供一个布尔值,True为倒序
items.sort(key=lambda x:x[1],reverse=True)#x[1],按每个元组中下标为1的值从小到大排序

list1 = [{'age': 20, 'name': 'abc'}, {'age': 25, 'name': 'ghi'}]
list2 = sorted(list1,key = lambda x:x['age'])#冒号前面是参,后面是对参的处理

按列表list1中字典的age从小到大排序

f = lambda x , y : x + y
#>>>f(10,15)#得25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值