集合、序列、字典、呵呵哒! ?(附上我礼貌又不失尴尬的微笑)
- 集合
集合类型定义:多个元素的无序组合,元素不可重复 建立方式:用 set() 或 {} ,元素用逗号分隔 (空集合只能用set) 应用场景:比较包含关系、数据去重 等
基本操作符
S | T
返回一个
新的集合 ,包括
S和T中的所有 元素
S - T
返回一个
新的集合 ,包括
S但不在T中的 元素
S & T
返回一个
新的集合 ,包括
S和T公共部分 元素
S ^ T
返回一个
新的集合 ,包括
S和T中非相同 元素
S <= T 或 S < T
返回
Ture/False ,判断S和T的
子集 关系
S >= T 或 S > T
返回
Ture/False ,判断S和T的
包含 关系
增强操作符
S |= T
更新集合S ,包括
S和T中的所有 元素
S -= T
更新集合S ,包括
S但不在T中的 元素
S &= T
更新集合S ,包括
S和T公共部分 元素
S ^= T
更新集合S ,包括
S和T中非相同 元素
集合 处理方法
S.add(x)
如果x不在S中,将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
判断S是否有元素x,是则返回Ture,否则返回False
x not in S
判断S有无元素x,无则返回Ture,有则返回False
set(x)
将 其他类型 转变为 集合类型
- 序列(元组&列表)
序列类型定义:一维有序向量,元素类型可以不同,用逗号分隔,可通过下标引导访问(正向从0,逆向从-1) 应用场景:数据保护(元组)、元素遍历(列表)
序列通用 操作符
判断
x in s
x为s元素,返回Ture,否则返回False
x not in s
x为s元素,返回False,否则返回Ture
增补
s + t
连接s和t
s*n 或 n*s
将s复制n次
索引
s[i]
返回s中第i个元素
切片
s[i : j : k]
返回s中 第 i 到 j 以 k 为步长 的子序列(
i 缺省至开头 ,
j 缺省至结尾 ,k 缺省为1)
序列通用 函数及方法
函数
len(s)
返回s的长度
min(s)
返回s的最小元素,
需要s中元素可比较
max(s)
返回s的最大元素,
需要s中元素可比较
方法
s.index(x,i,j)
返回s 第 i 到 j 中第一次出现元素x的下标
s.count(x)
返回s中出现x的次数
- 元组
元组类型及操作:不可修改,使用 () 或 tuple() 创建,小括号可选择使用
- 列表
列表类型及操作:随意修改,使用 [] 或 list() 创建,长度无限制
列表操作符
替换
ls[i] = x
替换ls第i元素为x
ls[i : j : k] = lt
替换ls切片部分为lt
删除
del ls[i]
删除ls中第i个元素
del ls[i: j : k]
删除ls 从i到j 以k为步长 的元素
更新
ls += lt
更新ls,将lt元素增加到ls中
ls *= lt
更新ls,将元素复制n次
列表处理方法
增补
ls.append(x)
在ls最后添加一个元素x
ls.insert(i,x)
在ls第 i 位置增加元素x
删除
ls.remove(x)
将ls中出现的第一个元素x删除
ls.clear()
删除ls所有元素
其他
ls.pop(i)
返回ls中第i个元素,并删除ls中元素x
ls.copy()
返回一个新列表,赋值ls中所有元素
ls.reverse()
将ls反转
- 字典
字典类型定义:映射关系的体现,键值对(key-value)的集合 建立方式:使用 {} 或 dict() 创建,键值对用 <键> : <值> 表示,用逗号分隔键值对 应用场景:表达对应关系
字典处理函数及方法
del d[k]
删除d中键k对应的数据值
k in d
判断键k是否在d中,在返回Ture,否则返回False
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中键值对的个数
- jieba库
精确模式
jieba.lcuts(s)
无冗余输出
全模式
jieba.lcuts(s,cut_all=True)
存在冗余输出
搜索引擎模式
jieba.lcut_for_search(s)
存在冗余输出
新词模式
jieba.add_word(w)
向词库添加新词w
>> > jieba. lcut( "中国是一个伟大的国家" )
[ '中国' , '是' , '一个' , '伟大' , '的' , '国家' ]
文本词频统计
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) )