实例:读取三国演义小说,并且绘制该小说的整篇词云
import jieba
from wordcloud import WordCloud
import imageio
# 通过imageio模块读取指定形状的图片
mask = imageio.imread('china.jpg')
with open('novel/threekingdom.txt','r',encoding=('UTF-8')) as f:
data = f.read()
# print(data)
#分词
word_list = jieba.lcut(data)
print(word_list)
print(len(word_list))
words = " ".join(word_list)
#绘制词云
WordCloud(
background_color='white',
font_path='msyh.ttc',
width=800,
height=600,
# 词云中词的最大数
# max_words=40,
# # 最大字体的大小
# max_font_size=80,
# # 最小字体的大小
# min_font_size =20,
mask=mask
).generate(words).to_file('三国词云1.png')
三国词云1.png
列表的排序
实例:打乱列表
li = []
for i in range(10):
li.append(i)
print('生成的i:',li)
# 随机打乱顺序
from random import shuffle
shuffle(li)
print('打乱顺序之后的li:',li)
对列表进行重新排序
1.使用list对象的sort方法
li.sort()
print('使用sort方法进行排序之后:',li)
reverse=True倒序排序
li.sort(reverse=True)
print('使用sort方法,指定reverse进行排序之后:',li)
2.使用内置函数sorted
li = sorted(li)
print('使用sorted函数排序之后',li)
li = sorted(li,reverse=True)
print('使用sorted函数,reverse=Ture 排序之后',li)
总结: sorted和sort的区别
1. sort仅针对列表进行排序,无返回值,会在原来的列表基础上修改
2. ssorted 是python中单独内置函数,可以对可迭代(iteratble)对象进行排序,
不局限于list,它不改变原生的数据,重新生成一个新的队列
函数 :将反复使用的代码封装起来,进行调用
格式
def 函数名(参数1,,,,):
pass
调用
函数名(参数1,,,,,)
实例:编写一个1-任意证书累加和的函数
def caculateNum(sum):
sum = 0
for i in range(1,num+1):
sum += i
return sum
num = int(input('请输入任意整数'))
print('1到{}之间的累加和为{}'.format(num,caculateNum(num)))
稍微复杂一些的列表排序
stu_info_list = [
{"name":"zhangsan","age":18,"addr":"浑南区"},
{"name":"lisi","age":50,"addr":"浑南区"},
{"name":"wangwu","age":3,"addr":"浑南区"},
{"name":"zhaoliu","age":35,"addr":"浑南区"},
{"name":"tianqi","age":20,"addr":"浑南区"},
]
print('排序前:',stu_info_list)
def sort_by_age(x):
return x["age"] #如果年龄如字符串"18","50"...,则 return int(x["age"],)
pass
# 对学生信息进行排序 key 是指定按照什么进行排序,它接收的是一个自定义函数的名字
stu_info_list.sort(key=sort_by_age)
print('排序后:',stu_info_list)
匿名函数
lambda 表达式
格式:
lambda 参数1,参数2,...:表达式
注意:参数可以有多个,但是返回的表达式只允许一个
实例: 两个数相加
def sum_tow_num(x,y):
return x+y
sum_tow_num = lambda x,y:x+y
print(sum_tow_num(1,5))
使用带有匿名函数的表达式排序
stu_info_list = [
{"name":"zhangsan","age":18,"addr":"浑南区"},
{"name":"lisi","age":50,"addr":"浑南区"},
{"name":"wangwu","age":3,"addr":"浑南区"},
{"name":"zhaoliu","age":35,"addr":"浑南区"},
{"name":"tianqi","age":20,"addr":"浑南区"},
]
stu_info_list = sorted(stu_info_list,key=lambda items:items['age'],reverse=True)
print(stu_info_list)
实例:三国人物TOP10排名
# 读取文件
import jieba
with open('novel/threekingdom.txt','r',encoding='UTF-8') as f:
data = f.read()
# 分词
words_list = jieba.lcut(data)
print(words_list)
# 构建一个容器,存储我们要的数据
# {"夏侯渊":34,"害怕":33......}
counts = {}
# 遍历wordlist 目标是筛选出人名
for word in words_list:
# print(word)
if len(word)<=1:
# 过滤无关词语即可
continue
else:
# 向字典里counts里更新值
# counts[word] = 字典中原来该词出现的次数 + 1
# counts["正文"] = counts["正文"] +1
counts[word] = counts.get(word,0) + 1
print(counts)
# 排序筛选
# 把字典转化成列表[(),()]
items = list(counts.items())
# 按照词频次数进行排序
items.sort(key=lambda x:x[1],reverse=True)
# 显示出现词语前20的词
for i in range(20):
# 将返回的数据拆开,拆包
# print(items[i])
role,count = items[i]
print(role,count)
# 删除无关词语
# 展示