IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 第6周 组合数据类型 -> 正文阅读

[Python知识库]第6周 组合数据类型

6.1 集合类型及操作

使用lambda定义匿名函数。
Python三种主流组合数据类型的使用方法。

集合类型定义:多个元素的无序组合。和数学概念中的集合一致。不可变数据类型,不能被修改。
集合类型要求元素独一无二。
集合用大括号{}表示,元素用逗号分隔。
使用set()建立集合

B = set("pypy123")

集合操作符
并,差,交,补

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的包含关系

4个增强操作符

集合的处理方法

S.add(x)
S.discard(x)
S.remove(x)  #如果x不在S中,会报错
S.clear()
S.pop()  #随机删除一个元素
S.copy()
len(S)
x in S #判断x是否在S中
x not in S  #
set(x)  #将其它类型变量转换成集合类型

集合类型应用场景
包含关系的比较

"p" in {"p", "y", 123}
{"p", "y"} >= {"p", "y", 123}

数据去重

ls = ["p", "p", "y", "y", 123]  #列表
s = set(ls)   #利用集合无重复元素的特点
lt = list(s)  

6.2 序列类型及操作

序列类型及操作
序列是具有先后关系的一组元素。
序列是一维元素向量,元素类型可以不同。
类似数学元素序列: s 0 , s 1 , . . . , s n ? 1 s_0,s_1,...,s_{n-1} s0?,s1?,...,sn?1?
序列是一个基类类型。
序列类型:字符串类型,元组类型,列表类型。

序号的定义。
正向递增序号,反向递减序号

序列处理函数及方法
6个操作符

x in s
x not in s
s + t
s * n 或 n * s
s[i]
s[i:j:k]  #切片

5个函数和方法

len(s)
min(s)
max(s)
s.index(x) 或 s.index(x,i,j)
s.count(x)

元组类型定义
元组是一种序列类型,一旦创建就不能被修改
使用小括号()或tuple()创建,元素间用逗号分隔
可以使用或不使用小括号

列表类型定义
列表是一种序列类型,创建后可以随意被修改
使用方括号[]或list()创建,元素间用逗号,分隔
列表中各元素类型可以不同,无长度限制
赋值,重新命名

ls[i] = x
ls[i:j:k] = lt
del ls[i]
del ls[i:j:k]  #对j而言,不包含它;对k而言,以0开始编号
ls += lt
ls *= n

列表类型操作函数和方法

ls.append(x)  #在它后面增加一个元素
ls.clear()
ls.copy()
ls.insert(i,x)  #在第i位置增加元素x
ls.pop(i)
ls.remove(x)
ls.reverse()

序列类型的应用场景:用于数据表示
数据保护:定义元组类型

lt = tuple(ls)

6.3 实例9:基本统计值计算

总个数,求和,平均值,方差,中位数

len()   #总个数
for ... in  #求和
#CalStatisticsV1.py
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):
	numbers = sorted(numbers)
	size = len(numbers)
	if size % 2 == 0:
		med = (numbers[size//2-1] + numbers[size//2]) / 2
	else:
		med = numbers[size//2]
	return med

6.4 字典类型及操作

字典类型定义:
映射是一种键(索引)和值(数据)的对应。
字典是键值对的集合,键值对无序。
采用大括号{}和dict()创建,键值对用冒号:表示
使用type(x)检测任何变量x的类型

字典处理函数及方法

del d[k]  #删除字典d中键k对应的数据值
k in d
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["a"] = 1
d["b"] = 2

判断字符"c"是否是d的键

"c" in d

字典类型的应用场景
统计数据的出现次数。
元素遍历

for k in d:  #k是键

6.5 jieba库的使用

jieba是优秀的中文分词第三方库。
jieba库提供了三种分词模式:精确模式、全模式、搜索引擎模式

pip install jieba

jieba分词依靠中文词库。
汉字间概率大的组成词组,形成分词结果。

精确模式:把文本精确的切分开,不存在冗余单词
全模式:把文本中所有可能的词语都扫描出来,有冗余
搜索引擎模式:在精确模式基础上,对长词再次切分

jieba.lcut(s)  #精确模式,返回一个列表类型的分词结果
jieba.lcut(s,cut_all=True)  #全模式
jieba.lcut_for_search(s)  #搜索引擎模式
jieba.add_word(w)  #向分词词典增加新词w

6.6 实例10:文本词频统计

需求:一篇文章,出现了哪些词?哪些词出现得最多?

哈姆雷特HAMLET

#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))

三国人物出场统计

#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))

词频统计 ? \Rightarrow ? 人物出场

#CalThreeKingdomsV2.py
import jieba
txt = open("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(10):
	word, count = items[i]
	print("{0:<10}{1:>5}".format(word,count))
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:02:37  更:2022-01-03 16:02:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:41:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码