组合数据类型
集合、序列、字典
集合类型及其操作
- 与数学中的概念相同
- 集合元素不可更改,即元素是不可变类型
- {}表示,元素用,分隔,元素可以是元组类型‘
- 可用set()建立集合类型
例如:B=set(“pypy123”)
{’1‘,’2‘,’3‘,’p‘,’y‘} 即不可包含相同元素,并且是无序的。
集合的操作符:
- S|T 并运算:返回一个新的集合
- S-T 差运算:
- S&T 交运算
- S^T 补运算
- S<=T,S<T:返回值为Ture或者False,一般用来判断集合间的关系
- S>=T,S>T:
运用增强操作符,可以不需要增加新的集合
集合的处理方法
集合类型的应用
序列类型及其应用
- 序列是一组具有先后顺序的元素
- 序列是一维元素向量,元素类型可以不用
- 类似数学元素序列:s1,s2,……
- 元素间有序号引导,通过下标访问序列的特定元素
序列类型的衍生:字符串类型,元组类型,列表类型
序列处理函数及方法:
元组类型及操作
- 元组是序列类型的一种扩展
- 元组是一种序列类型,一旦创建就不能修改
- 使用小括号()或者tuple()创建,元素之间用逗号分隔
- 可以使用或者不使用小括号
def s:
return 1,2
返回的即是一个元组类型,没有用小括号
元组类型继承了序列类型的全部操作
列表类型及其操作
如果一个列表不是通过[]或者list()方式创建,而是通过列表的赋值,那么仅是给该列表赋予了一个新的名字,没有其他的含义
sorted(ls)可以对列表ls进行排序
在ls.append(x)如果x是一个列表,则x会作为一个元素增加到ls中
列表类型的应用
遍历元素和数据保护
基本统计值的计算
实例分析
#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):
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
def main():
n=getnum()
m=mean(n)
print("平均值:{},方差:{:.2},中位数:{}.".format(m,dev(n,m),median(n)))
main()
字典类型
在字典d中,x in d 键是值的序号,也是字典中值的索引方式
所以x in d中的x被当做d中的序号进行判断,
并且在创建字典时,如果相同键值对应不同的值时,字典采用最后一个“键值对”
jieba库的使用
中文分词的第三方库,可以对一句话分成单个词
安装方法:
在cmd命令行:pip install jieba
出现安装成功的提示即可
通过中文词库,根据汉字间的概率进行分词
文本词频的统计
三国演义
#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#如果键rword存在,则返回相应的值,不存在返回0,因为在遍历第一个的时候,肯定是不存在的,所以为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))
哈姆雷特
#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))