集合 : 多个元素的无序组合
- 集合类型与数学中的集合概念一致
- 集合元素之间无序,每个元素唯一,不存在相同元素
-集合元素不可更改,不可是可变数据。即集合中的元素不能被修改 。
集合的类型定义:
- 集合使用打括号表示{},元素间用逗号分割;
- 建立集合类型用{}或者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,
- d.pop(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))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)