6.1 集合类型及操作
使用lambda定义匿名函数。 Python三种主流组合数据类型的使用方法。
集合类型定义:多个元素的无序组合。和数学概念中的集合一致。不可变数据类型,不能被修改。 集合类型要求元素独一无二。 集合用大括号{}表示,元素用逗号分隔。 使用set()建立集合
B = set("pypy123")
集合操作符 并,差,交,补
S | T
S - T
S & T
S ^ T
S <= T 或 S < T
S >= T 或 S > T
4个增强操作符
集合的处理方法
S.add(x)
S.discard(x)
S.remove(x)
S.clear()
S.pop()
S.copy()
len(S)
x in 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]
ls += lt
ls *= n
列表类型操作函数和方法
ls.append(x)
ls.clear()
ls.copy()
ls.insert(i,x)
ls.pop(i)
ls.remove(x)
ls.reverse()
序列类型的应用场景:用于数据表示 数据保护:定义元组类型
lt = tuple(ls)
6.3 实例9:基本统计值计算
总个数,求和,平均值,方差,中位数
len()
for ... in
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]
k in d
d.keys()
d.values()
d.items()
d.get(k,<default>)
d.pop(k,<default>)
d.popitem()
d.clear()
len(d)
通过赋值来新增元素。
d["a"] = 1
d["b"] = 2
判断字符"c"是否是d的键
"c" in d
字典类型的应用场景 统计数据的出现次数。 元素遍历
for k in d:
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)
6.6 实例10:文本词频统计
需求:一篇文章,出现了哪些词?哪些词出现得最多?
哈姆雷特HAMLET
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))
三国人物出场统计
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
? 人物出场
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))
|