1 集合数据类型及操作
1.1 集合类型的定义(多个元素的无序组合)
集合类型和数学中的集合概念一致
集合元素中无序,每个元素唯一(不存在相同的元素)
集合元素不可更改,不能是可变数据类型
之所以建立空集合类型,必须用set(),而不是直接用{},那是因为{}表示的是字典
EG:
1.2 集合操作符
1.2.1 6个操作符
1.2.2 4个增强操作符
1.2.3 集合间操作符
EG:![](https://i-blog.csdnimg.cn/blog_migrate/d709be319747d2a42230642c209740dc.png)
1.3 集合处理方法
1.4 集合类型应用场景
1.4.1 包含类型比较
1.4.2 数据去重:集合类型所有元素无重复
2 序列类型及操作
2.1 序列类型定义(序列是具有先后关系的一组元素)
序列是一个基类类型
2.1 序列处理函数及方法
2.1.1 序列类型通用操作符
EG:
EG:
2.2 5个函数和方法
EG:
2.3 元组类型及操作(元组是序列类型的一种扩展)
EG:
元组继承序列的全部通用操作
EG:
2.4 列表类型及操作
列表类型是序列类型的一种扩展,十分常用
EG:
2.4.1 列表类型操作函数和方法
EG:
EG:
2.4.2 测试
sorted() 作为 Python 内置函数之一,其功能是对序列(列表、元组、字典、集合、还包括字符串)进行排序。
2.5 序列类型应用场景
2.5.1 元素遍历
2.5.2 数据保护
2.5.3 列表、元组、字典、集合的区别
1.列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)。
2.元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变。
3.元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。
3 实例:基本统计值计算
3.1 问题分析
方差计算公式:
思路:
1)首先要将数字保留在一个列表内
2)平均值
3)方差
3.2 代码
#获取多数据输入
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=num[size//2]
return med
n=getnum()
m=mean(n)
print("平均值:{},方差{:.2f},中位数:{}".format(m,dev(n,m),median(n)))
4 字典类型及操作
4.1 字典类型定义
4.2 字典类型的用法:在字典变量中,通过键获得值
EG:
4.3 字典处理函数及方法
EG:
EG:
4.4 测试
4.5 字典类型应用场景
4.5.1 映射的表达
4.5.2 元素遍历
4.6 总结
5 jieba库的使用
5.1 jieba库概述
5.2 jieba库安装
cmd:pip install jieba
(42条消息) python 的jieba模块安装下载_SAPmatinal的博客-CSDN博客_jieba模块下载https://blog.csdn.net/SAPmatinal/article/details/106188679?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-106188679-blog-105524311.pc_relevant_multi_platform_featuressortv2dupreplace&spm=1001.2101.3001.4242.2&utm_relevant_index=4(42条消息) python中文分词-如何下载并安装jieba包_仙女也秃头的博客-CSDN博客_下载jieba
https://blog.csdn.net/z_mawkish/article/details/105524311
5.3 jieba分词原理
5.4 jieba分词的三种模式
5.5 jieba库常用函数
![](https://i-blog.csdnimg.cn/blog_migrate/055b5ed25f3f6845eb62cf559c3d4bfe.png)
6 文本词频统计
6.1 问题分析
6.2 英文词频
6.2.1 代码
#CalHamletV1.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:
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))
6.2.2 解析
1.counts[word]=counts.get(word,0)+1#是对进行计数word出现的频率进行统计,当word不在words时,返回值是0,当word在words中时,返回+1,以此进行累计计数。
2.Python字符串:split() 方法
3.以counts.get(word,0) 为例
counts.get(word,0) 返回字典counts中word元素对应的值,若没有返回默认值(进行初始化)。
1)若不存在word,则字典counts中生成word元素,并使其对应的数字为0,即
counts = {word:0}
此时counts.get(word,0) 作用是检测并生成新元素,括号中的0只用作初始化,之后再无作用
2)当字典中有word元素时,count.get(word,0) 作用是返回该元素对应的值,即0
Python 字典中 count.get(word,0)+1是用来计数的。
例:counts[word] = counts.get(word,0)+1
当counts = {} 中
不存在 word 时输出 counts={}
当第一次遇到 word 时将word 添加到字典 counts 中,并初始化其对应数值为0,然后+1,即该word已经出现过一次,此时输入counts,输出为:
counts = {word,1}
第二次遇到时 输出为:
counts = {word,2}
注:
counts[word] = counts.get(word,0)+1
是对进行计数word出现的频率进行统计,
当word不在words时,返回值是0,
当word在words中时,返回+1,
以此进行累计计数。
4.描述
Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
语法
items()方法语法:
dict.items()
5.items=list(counts.items())
print(items)
# 将列表中的age由大到小排序 alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}] b=sorted(alist,key=lambda x:x['age'],reverse=True) print(b)
items=list(counts.items())#[('a',1),('b',2)...] items.sort(key=lambda x:x[1],reverse=True)#降序
使用python对列表(list)进行排序
python3排序 sorted(key=lambda)
key=lambda 元素: 元素[字段索引]
6.
txt="welcome to china" x=txt.split() print(x)
7.
items=list(counts.items()) print(items)
6.3 汉文词频
6.2.1 代码1.0
#CalThreeKingdomsV1.py
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.coding=utf-8的作用是
声明python代码的文本格式是utf-8编码,
也即告诉python解释器要按照utf-8编码的方式来读取程序。
如果不加这个声明,无论代码中还是注释中有中文都会报错。
6.2.2 代码2.0
#CalThreeKingdomsV2.py
import jieba
excludes = {"将军","却说","荆州","二人","不可","不能","如此"}
txt = open("threekingdoms.txt", "r", encoding='utf-8').read()
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))
注意
本文题目来源为Python123平台和中国大学MOCC的《Python语言程序设计》课程, 主讲老师:嵩天、黄天羽、礼欣。如有侵权,立删。