2 组合数据类型
2.1 集合类型
集合的定义及操作
~集合用大括号{}表示,元素间用逗号分隔;
~建立集合类型用{}或set();
~建立空集合类型,必须用set();
~集合元素之间无序;
~集合中每个元素唯一,不存在相同元素
>>> A = {"python",'666',("wenwei-blog",666)} {'python', '666', ('wenwei-blog', 666)} >>> B = set("pypy") {'y', 'p'} >>> C = {"python",123,"python",123} {'python', 123}
集合操作符
6个操作符
4个增强操作符
** 集合操作方法**
集合应用场景
包含关系比较;数据去重。
2.1 序列类型定义
~序列是具有先后关系的一组元素
~序列是一个基类类型(基本数据类型)
~序列类型分为字符串、列表、元组类型
2.2 序列类型之列表
列表由一系列按特定顺序排列的元素组成,用方括号[]来表示列表。
列表的增删改查相关操作
对列表数字执行简单统计计算
>>> digits = [1,23,434,55,44,67] >>> min(digits) 1 >>> max(digits) 434 >>> sum(digits) 624
** 列表相关练习**
练习1:创建一个列表,其中包含数字1-100并打印出来然后计算列表数字的总值。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
>>> digits = [value for value in range(1,101)];sum(digits) 5050
练习2:求1-20的奇数
>>> for i in range(1,21,2): print(i) 1 3 5 7 9 11 13 15 17 19
练习3: 输出3-30以内能被3整除的数字
>>> lists = [n for n in range(3,31)] >>> lists >>> for i in lists: if i % 3 == 0: print(i)
2.3 序列类型之元组
元组其实跟列表差不多,也是存一组数据,只不过它一旦创建便不能修改,所以又叫只读列表
它只有两个方法,一个是count(统计元组某个元素出现的次数tuple.count(‘str’)),一个是index(查看某个元素的索引号tuple.index(‘str’))
>>> names = ('zhiwenwei','zhouyouxian') >>> names.index('zhiwenwei') 0 >>> names.count('zhiwenwei') 1
元组练习题
有如下变量,请实现要求的功能
tu = (“alex”, [11, 22, {“k1”: ‘v1’, “k2”: [“age”, “name”], “k3”: (11,22,33)}, 44])
a. 请问tu变量中的第一个元素 “alex” 是否可被修改?
元组不可直接被修改,需要转换成列表或字典
b. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”
k2是字典的键,对应的值是列表可修改:tu[1][2][‘k2’]=‘Seven’
c. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”
k3是字典的键,对应的值是元组不可修改
2.4 字典类型
字典是包含0个或多个键值对的集合,没有长度限制,可以根据键索引值的内容。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
Python语言中通过字典实现映射,通过大括号{}建立,建立模型如下:
{键1:值1,键2:值2,…}
>>> city = {'中国':'北京','美国':'纽约','法国':'巴黎'} >>> city {'中国': '北京', '美国': '纽约', '法国': '巴黎'}
拓展:字典是无序的。python语言中,字符串、列表、元组都是采用数字索引,字典采用字符索引。
字典的函数和方法
字典的基本原则
字典是一个键值对的集合,该集合以键为索引,一个键对应一个值信息
字典中的元素以键信息为索引访问
字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。
2.5 jieba库基本介绍
jieba库提供三种分词模式,最简单只需要掌握一个函数;
jieba是优秀的中文分词第三方库,需额外安装
jieba库的安装方法
pip install jieba
jieba分词的三种模式
精确模式:把文本精确切分,不存冗余单词
>>> word1 = jieba.lcut("python无所不能!除了生不出孩子,我们应该学习使用它!") Building prefix dict from the default dictionary ... Dumping model to file cache /tmp/jieba.cache Loading model cost 1.832 seconds. Prefix dict has been built succesfully. >>> print(word1,type(word1)) ['python', '无所不能', '!', '除了', '生不出', '孩子', ',', '我们', '应该', '学习', '使用', '它', '!']
2.6 实例:文本词频统计
英文文本:hamlet,统计出现最多的英文单词
https://python123.io/resources/pye/hamlet.txt
代码实现:
#Hamlet词频统计 def getText(): txt = open("hamlet",'r').read() txt = txt.lower() #大写字母转换小写 for word in '~!@#$%^&*()_+-={}[],./:";<>?': txt = txt.replace(word," ")#把多余符号转换为空格 return txt hamletTxt = getText() words = hamletTxt.split() #以空格拆分为列表 counts = {} for word in words: counts[word] = counts.get(word,0) + 1 #以每个词为键,值默认0,,每出现一次累加1 items = list(counts.items()) items.sort(key=lambda x:x[1],reverse=True) #[1]按照第二维排序,reverse=True表示降序 for i in range(10): word,count = items[i] print("{0:<10}{1:5}".format(word,count))
中文文本:三国,分析人物
https://python123.io/resources/pye/threekingdoms.txt
import jieba txt = open("Threekingdoms", '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[word] = counts.get(word, 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))