Python入门笔记06 | 组合数据类型

本文详细介绍了Python的组合数据类型,包括集合、序列(如字符串、元组、列表)和字典。讲解了各种类型的特点、操作方法及应用场景,如集合的去重功能、序列的增删改查操作以及字典的映射特性。同时,还提到了jieba库在中文分词中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python入门笔记06 | 组合数据类型

一、主要组合数据类型

  1. 集合类型
  2. 序列类型
  3. 字典类型

二、集合类型及操作
1.集合类型的定义:多个元素的无序组合

1)集合元素之间无序,每个元素唯一,不存在相同元素
2)集合中的元素要求是不可变数据类型(列表类型是可变的数据类型)

2. 集合的表示:用{}表示,元素间用逗号分隔
3.集合的建立
(1)建立集合类型用{}或set()函数
(2)建立空集合必须用set()函数
(3)示例

A = {"python",123,("yuyu",123)} #使用{}建立集合
#集合为{123,"python",("yuyu",123)}
B = set("yuyu123") #使用set()建立集合
#集合为{"y","u","1","3","2"}

4. 集合操作符
(1)6个操作符
在这里插入图片描述
(2)4个增强操作符 – 实现对集合的更新
在这里插入图片描述
(3)操作符实例
在这里插入图片描述
5. 集合处理方法
(1)
在这里插入图片描述
在这里插入图片描述
(2)方法实例

A = {"p","y",123}
try:
    while True:
        print(A.pop(),end="")
except:
    pass

for…in… 与 while 方式都能遍历集合类型

6.集合类型应用场景
(1)包含关系比较
在这里插入图片描述
(2)数据去重
(利用集合中所有元素不能重复的特点,对一组数据中的重复元素进行删除)

#eg:将列表中的重复元素去除并仍以列表形式输出
ls = ["p","p","y","y",123]
A = set(ls)
lt = list(A) #将集合转换为列表
print(lt)

二、 序列类型及操作
1. 序列类型的定义:具有先后关系的一组元素

1)一维元素向量,元素类型可以不同,元素之间可以相同
2)类似于数学元素序列:s0,s1,s2,…sn-1
3)元素间由序号引导,通过下标访问序列的特定元素

2. 序列类型的衍生
(1)字符串类型
(2)元组类型
(3)列表类型

3. 序列处理函数及方法
(1)6个操作符
在这里插入图片描述
(2)操作符实例

#逆序输出列表内元素
ls = ["python","yuyu",123]
print(ls[::-1])

(3)5个函数和方法
在这里插入图片描述
4. 元组类型及操作

1)元组是一种序列类型,一旦创建就不能被修改
2)使用小括号()或tuple()创建,元素间用逗号分隔
3)可以使用或不使用小括号
在这里插入图片描述

5. 列表类型及操作

1)列表是一种序列类型,创建后可以随意被修改
2)使用方括号[]或list()创建,元素间用逗号分隔
3)列表中各元素类型可以不同,无长度限制

(1)操作函数及方法
在这里插入图片描述
(2)实例
在这里插入图片描述
(3)修改列表 – 增删改查
在这里插入图片描述
(4)实例
在这里插入图片描述
6. 序列类型应用场景

最主要作用:表示一组有序数据,进而操作它们
–元组用于元素不改变的应用场景,更多用于固定搭配场景
–列表更加灵活,它是最常用的序列类型

(1)元素遍历

在这里插入图片描述
(2)数据保护

如果不希望数据被程序改变,转换为元组类型

在这里插入图片描述

  • 实例9:基本统计值计算

  • 需求:给出一组数,对它们有个概要理解
    –总个数、求和、平均值、方差、中位数

  • 问题分析
    在这里插入图片描述

  • 代码

#分析数据
def getNum(): #得到用户输入的数据
    nums = []
    numstr = input("输入数字(回车退出):")
    while numstr != "":
        nums.append(eval(numstr))
        numstr = input("输入数字(回车退出):")
    return nums
def mean(numbers): #计算平均值
    s = 0.0
    for num in numbers:
        s += num
    return s / len(numbers)
def dev(numbers,mean):#计算方差
    s = 0.0
    for num in numbers:
        s += (num-mean)**2
    return pow(s / (len(numbers)-1),0.5)
def median(numbers): #计算中位数
    sorted(numbers) #python内部排序函数
    if len(numbers)%2==0:
        return (numbers[len(numbers)//2-1]+numbers[len(numbers)//2] / 2)
    else:
        return numbers[len(numbers)//2]
n = getNum()
m = mean(n)
print("这组数据的平均值为{:.2f},方差为{:.2f},中位数为{}".format(m,dev(n,m),median(n)))
  • 结果展示
    在这里插入图片描述
    三、 字典类型及操作
    1. 字典类型定义
    (1)映射:一种键(索引)和值(数据)的对应关系
    (2)字典类型是映射的体现

1)键值对:键是数据索引的扩展 key->value
2)字典是键值对的集合,键值对之间无序
3)采用{}和dict()创建,键值对用冒号表示

(3)实例
在这里插入图片描述
(4)特殊点:{}方式默认生成字典类型,而不是集合类型

2. 字典处理函数及方法
在这里插入图片描述
在这里插入图片描述
3. 应用场景
映射的表达–表达键值对数据,进而操作它们

四、 jieba库的使用

jieba是优秀的中文分词第三方库

1. 原理
(1)利用一个中文词库,确定汉字之间的关联概率
(2)汉字间概率大的组成词组,形成分词结果

2. jieba分词的三种模式
(1)精确模式:把文本精确切分开,不存在冗余单词
(2)全模式:把文本中所有可能的词语都扫描出来,有冗余
(3)搜索引擎模式:在精确模式基础上,对长词再次切分

3. 常用函数
在这里插入图片描述
在这里插入图片描述

  • 实例10:文本词频特辑

  • 需求分析:一篇文章出现了哪些词?哪些词出现得最多?(中文?英文?)

  • 英文 Hamlet

#CalHamletV1.py
#归一化处理
def getText():
    txt = open("hamlet.txt","r").read()
    txt = txt.lower()
    for c in '!"#$()*+,-./:;<=>?@[\\]^_`{|}~':
        txt = txt.replace(c," ")
    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)
#lamdba指定使用哪一个多元选项的列作为排序列,排列顺序从大到小
for i in range(10):
    word,count = items[i]
    print("{0:<10}{1:>5}".format(word,count))
    
  • 中文 《三国演义》
#CalThreeKingdomsV1.py
import jieba
txt = open("三国演义.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))
  • 结果
    在这里插入图片描述
  • 升级版 统计人物出场顺序
#CalThreeKingdomsV2.py
import jieba
txt = open("三国演义.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))

  • 结果
    在这里插入图片描述

注:笔记内容根据慕课:Python语言程序设计(北京理工大学 嵩天、黄天羽、礼欣)授课内容整理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值