Python学习六组合数据类型

组合数据类型

集合、序列、字典
集合类型及其操作

  • 与数学中的概念相同
  • 集合元素不可更改,即元素是不可变类型
  • {}表示,元素用,分隔,元素可以是元组类型‘
  • 可用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))
发布了43 篇原创文章 · 获赞 11 · 访问量 2608

猜你喜欢

转载自blog.csdn.net/weixin_43328816/article/details/98071967