第六章 组合数据类型

news/2024/12/28 9:25:53/

文章目录

    • 第六章 组合数据类型
        • 6.1 组合数据类型的基本概念
          • 6.1.1 集合类型概述
          • 6.1.2 序列类型概述
          • 6.1.3 映射类型概述
        • 6.2 列表类型
          • 6.2.1 列表的定义
          • 6.2.2 列表的索引
          • 6.2.3 列表的切片
        • 6.3 列表类型的操作
          • 6.3.1 列表的操作函数
          • 6.3.2 列表的操作方法
        • 6.4 字典类型
          • 6.4.1 字典的定义
          • 6.4.2 字典的索引
        • 6.5 字典类型的操作
          • 6.5.1 字典的操作函数
          • 6.5.2 字典的操作方法
        • 6.6 实例解析——文本词频统计
        • 习题6
          • 一、选择题
          • 二、编程题

第六章 组合数据类型

6.1 组合数据类型的基本概念

能够表示多个数据量的类型成为组合数据类型。Python语言中最常用的组合数据类型有3大类,分别是集合类型、序列类型和映射类型

集合类型是一个具体的数据类型名称,而序列类型和映射类型是一类数据类型的总称。

集合类型是一个元素的集合,元素之间无序,相同元素在集合中唯一存在。

序列类型是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他。序列类型的典型代表是字符串类型和列表类型。

映射类型是“键—值”数据项的组合,每个元素是一个键值对,表示为(key,value)。映射类型的典型代表是字典类型。

6.1.1 集合类型概述

Python语言中的集合类型与数学中的集合概念一致,既包含0个或多个数据项的无序组合。集合是无序组合,用大括号({})表示,它没有索引和位置的概念,集合中元素可以动态增加或删除。

集合元素不可重复出现,元素类型只能是固定数据类型,例如:整数、浮点数、字符串、元组等,列表、字典和集合类型本身都是可变数据类型,不能作为集合的元素出现。

需要注意,由于集合元素是无序的,集合的打印效果与定义顺序可以不一致。由于集合元素独一无二,使用集合类型能够过滤重复元素。

集合类型有4个操作符:交集(&)、并集(|)、差集(-)、补集(^),操作逻辑与数学定义相同。

操作符的运算描述
S - T返回一个新集合,包括在集合S中但不在集合T中的元素
S & T返回一个新集合,包括同时在集合S和T中的元素
S ^ T返回一个新集合,包括集合S和T中非共同元素
S | T返回一个新集合,包括结婚S和T中所有元素

集合类型主要用于元素去重,适合于任何组合数据类型。集合类型常用的操作函数或方法:

函数或方法描述
S.add(x)如果数据项x不在集合S中,将x增加到s
S.remove(x)如果x在集合S中,移除该元素,不再产生KeyError异常
S.clear()移除S中所有数据项
len(S)返回集合S元素个数
x in S如果x是S的元素,返回True,否则返回False
x not in S如果x不是S的元素,返回True,否则返回False
6.1.2 序列类型概述

序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。

由于元素之间存在顺序关系,所以序列中可以存在相同数值但位置不同的元素。Python语言中有很多数据类型都是序列类型,其中比较重要的是:字符串类型、列表类型和元组类型

字符串类型可以看成是单一字符的有序组合,属于序列类型。列表则是一个可以使用多种类型元素的序列类型。序列类型使用相同的索引体系,即正向递增序号和反向递减序号。

序列类型的操作符和函数:

操作符描述
x in S如果x是S的元素,返回True,否则返回False
x not in S如果x不是S的元素,返回True,否则返回False
s + t连接s和t
s * n 或 n * s将序列s复制n次
s[i]索引,返回序列的第i个元素
s[i: j]切片,返回包含序列s第i到j个元素的子序列(不包含第j个元素)
s[i: j:k]步骤切片,返回包含序列s第i到j个元素以k为步数的子序列
len(s)序列s的元素个数(长度)
min(s)序列s中的最小元素
max(s)序列s中的最大元素
s.index(x)序列s中第一次出现元素x的位置
s.count(x)序列s中出现x的总次数
6.1.3 映射类型概述

映射类型“键—值”数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。键值对(key,value)是一种二元关系,源于属性和值的映射关系。

映射类型是序列类型的一种扩展。在序列类型中,采用从0开始的正向递增序号进行具体元素值的索引。而映射类型则由用户来定义序号,即键,用其去索引具体的值。

键(key)表示一个属性,也可以理解为一个类别或项目,值(value)是属性的内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。

6.2 列表类型

6.2.1 列表的定义

列表是包含0个或多个元素的有序序列,属于序列类型。列表可以进行元素增加、删除、替换和查找等操作。列表没有长度限制,元素类型可以不同,不需要预定义长度。

列表类型用括号({})表示,也可以通过list(x)函数将集合或字符串转换成列表类型。

列表属于序列类型,所以列表类型支持序列类型对应的操作。

6.2.2 列表的索引

索引是列表的基本操作,用于获得列表的一个元素。使用中括号作为索引操作符。

可以使用遍历循环对列表类型的元素进行遍历操作,语法格式如下:

for <循环变量> in <列表变量>:<语句块>
6.2.3 列表的切片

切片是列表的基本操作,用于获得列表的一个片段,即获得一个或多个元素。切片后的结果也是列表类型。语法格式如下:

<列表或列表变量>[N:M] 或 <列表或列表变量>[N:M:K]

切片获取列表类型从N到M(不包含M)的元素组成新的列表。其中,N和M为列表类型的索引序号,可以混合使用正向递增序号和反向递减序号,一般要求N小于M,当N大于等于M时,返回空列表。当K存在时,切片获取类表类型从N到M(不包含M)以k为步长所对应元素组成的列表。

6.3 列表类型的操作

6.3.1 列表的操作函数
操作函数描述
len(ls)列表ls的元素个数(长度)
min(ls)列表ls中的最小元素
max(ls)列表ls中的最大元素
list(x)将x转变成列表类型
6.3.2 列表的操作方法

列表类型存在一些操作方法,语法格式如下:

<列表变量>.<方法名称>(<方法参数>)
方法描述
ls.append()在列表ls最后增加一个元素x
ls.insert(i,x)在列表ls第i位置增加元素x
ls.clear()删除ls中所有元素
ls.pop(i)将列表ls中第i项元素取出并删除该元素
ls.remove(x)将列表中出现的第一个元素x删除
ls.reverse()列表ls中元素反转
ls.copy()生成一个新列表,复制ls中所有元素
del <列表变量>[<索引序号>]
del <列表变量>[<索引起始>:<索引结束>]
对列表元素或片段进行删除

6.4 字典类型

6.4.1 字典的定义

“键值对”是组织数据的一种重要方式,广泛应用在Web系统中。键值对的基本思想是将“值”信息关联一个“键”信息,进而通过键信息查找对应值信息,这个过程叫映射。Python语言中通过字典类型实现映射。

Python语言中的字典使用大括号{}建立,每个元素是一个键值对,语法格式如下:

{<1>:<1>, <2>:<2>, ……, <键n>:<值n>}

其中,键和值通过冒号连接,不同键值对通过逗号隔开。字典类型也具有和集合类似的性质,即键值对之间没有顺序且不能重复。

6.4.2 字典的索引

索引是按照一定顺序检索内容的体系。列表类型采用元素顺序的位置进行索引。由于字典元素“键值对”中键是值的索引,因此,可以直接利用键值对关系索引元素。字典是存储可变量键值对的数据结构,键和值可以是任意数据类型,通过键索引值,并可以通过键修改值。

字典中键值对的索引语法格式如下,采用中括号格式:

<> = <字典变量>[<>]

利用索引和赋值(=)配合,可以对字典中每个元素进行修改。

d = {"201801": "小明", "201803": "小白"}
d["201802"] = "小红"
print(d)# 运行结果
{'201801': '小明', '201803': '小白', '201802': '小红'}

使用带括号可以创建字典。通过索引和赋值配合,可以向字典中增加元素。

d = {}
d["201802"] = "小红"
print(d)# 运行结果
{'201802': '小红'}

6.5 字典类型的操作

6.5.1 字典的操作函数
操作函数描述
len(d)字典d的元素个数(长度)
min(d)字典d中键的最小值
max(d)字典d中键的最大值
dict()生成一个空字典
6.5.2 字典的操作方法

字典类型存在一些操作方法,语法格式如下:

操作方法描述
d,keys()返回所有的键信息
d.values()返回所有的值信息
d.items()返回所有的键值对
d.get(key,default)键存在则返回相应值,否则返回默认值
d.pop(key,default)键存在则返回相应值,同时删除键值对,否则返回默认值
d.popitem()随即从字典中取出一个键值对,以元组(key, value)形式返回
d.clear()删除所有的键值对
del d{“键”}删除字典中元素

与其他组合类型一样,字典可以遍历对其元素进行遍历,语法格式如下:

for <变量名> in <字典名>:<语句块>

for循环返回的变量名是字典的索引值。如果需要获得键对应的值,可以在语句开中通过get()方法获得。

d = {"201801": "小明", "201803": "小白", "201802": "小红"}
for i in d:print(f"字典的键:{i}\t\t值:{d.get(i)}")# 运行结果
字典的键:201801		值:小明
字典的键:201803		值:小白
字典的键:201802		值:小红

6.6 实例解析——文本词频统计

def getText():txt = open("hamlet.txt", "r").read()txt = txt.lower()for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':txt = txt.replace(ch, " ")  # 将文本中特殊字符替换为空格return txthamletTxt = 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))# 运行结果
the        1138
and         965
to          754
of          669
you         550
i           542
a           542
my          514
hamlet      462
in          436

习题6

一、选择题
  1. 以下程序的输出结果是:_________

    names = ['小明', '小红', '小白', '小新']
    if '小明朋友' in names:print('存在')
    else:print('不存在')
    

    A 存在 B 不存在 C 程序错误 D 不确定

    正确答案:B

  2. 以下创建字典方式错误的是:_________
    A d = {1:[1,2], 3:[3,4]} B d = {[1,2]:1, [3,4]:3}

    C d = {(1,2):1, (3,4):3} D d = {1:‘张三’, 3:‘李四’}

    正确答案:B

  3. 以下说法中错误的是:_________

    A 浮点数0.0等于False,条件判断为假

    B 空字典对象不等于False,条件判断为真

    C 值为0的任何数字类型元素相当于False,条件判断为假

    D 空字符串对象相当于False,条件判断为假

    正确答案:B

  4. 以下程序的输出结果为:_________

    nums = [1, 2, 3, 4]
    nums.append([5, 6, 7, 8])
    print(len(nums))
    

    A 4 B 5 C 8 D 以上都不对

    正确答案:B

  5. 以下选项中不能创建一个字典的是:_________

    A d = {[1,2,3]:‘Python’} B d = {}

    C d = {(1,2,3):‘Python’} D d = {3 : 5}

    正确答案:A

  6. 以下程序的输出结果是:_________

    d = {'1': 1, '2': 2, '3': 3, '4': 4}
    d2 = d
    d['2'] = 5
    print(d['2'] + d2['2'])
    

    A 2 B 5 C 7 D 10

    正确答案:D

  7. 以下数据类型属于不可变化类型的是:_________

    A 列表 B 复数 C 字典 D 元组

    正确答案:D

  8. 将一个字典的内容添加到另外一个字典中的方法是:_________
    A update() B keys() C items() D get()

    正确答案:A

  9. 列表类型中pop()的功能是:_________

    A 删除列表中第一个元素 B 返回并删除列表中第一个元素

    C 删除列表中最后一个元素 D 返回并删除列表中最后一个元素

    正确答案:D

  10. a和b是两个列表,将它们的内容合并为列表c的方法是:_________

    A c = a.update(b) B a.update(b) C c = [a, b] D c = a + b

    正确答案:D

二、编程题
  1. 英文字符频率统计。

    # 编写一个程序,对给定字符串中出现的a-z字母频率进行分析,忽略大小写,采用降序方式输出。
    text = input("请输入一个字符串:")
    dic = {}
    for c in text.lower():if c.isalpha():dic[c] = dic.get(c, 0) + 1
    freq_sorted = sorted(dic.items(), key=lambda x: x[1], reverse=True)
    for item in freq_sorted:print(item[0], item[1])
    
  2. 中文字符频率统计。

    # 编写一个程序,对给定的字符中出现的全部字符(含中文字符)频率进行分析,采用降序方式输出
    text = input("请输入一个字符串:")
    dic = {}
    for c in text:dic[c] = dic.get(c, 0) + 1
    freq_sorted = sorted(dic.items(), key=lambda x: x[1], reverse=True)
    for item in freq_sorted:print(item[0], item[1])
    
  3. 随机密码生成。

    # 编写程序在26个字母大小写和9个数字组成的列表中随机生成10个8位密码
    import random
    import stringcharacters = string.ascii_letters + string.digits
    # 生成26个字母大小写和9个数字组成的字符列表passwords = []
    for i in range(10):password = ''.join(random.sample(characters, 8))passwords.append(password)# 随机生成8位密码,将密码添加到列表中for password in passwords:print(password)# 输出生成的10个密码
    
  4. 重复元素判定。

    # 编写一个函数,接收列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和输出测试结果的程序
    def check_duplicate(lst):for item in lst:if lst.count(item) > 1:return Truereturn Falselst = list(input("请输入一段内容:"))
    print(f"{check_duplicate(lst)}")
    
  5. 重复元素判定续。

    # 利用集合的无重复性改变上一个程序,获得一个更快更简洁的版本
    def check_duplicate(lst):return len(set(lst)) != len(lst)lst = list(input("请输入一段内容:"))
    print(f"{check_duplicate(lst)}")
    

http://www.ppmy.cn/news/106793.html

相关文章

Tinder多账号注册怎样防关联?

Tinder是目前除了Facebook&#xff0c;用户数量较多的一款海外交友软件。它采用匹配的机制&#xff0c;双方只有互相表示感兴趣才能开始聊天。由于它的特殊机制&#xff0c;一上线就吸引了很多用户&#xff0c;有着很强的广告效应。因此&#xff0c;很多人把Tinder当作一个不错…

【复杂网络建模】——Pytmnet进行多层网络分析与可视化

目录 一、Pymnet介绍 二、安装步骤 三、多层网络的构建 1、单层网络的构建

KubeVirt技术介绍及实验部署

虚拟化简介 在云计算发展中&#xff0c;有两类虚拟化平台&#xff1a; openstack&#xff08;iaas&#xff09;&#xff1a;关注于资源的利用&#xff0c;虚拟机的计算&#xff0c;网络和存储Kubernetes&#xff08;pass&#xff09;&#xff1a;关注容器的编排调度&#xff…

数据挖掘--贝叶斯分类详解

贝叶斯分类是一种基于贝叶斯定理的分类方法&#xff0c;它通过先验概率和条件概率来计算后验概率&#xff0c;从而对数据进行分类。具体来说&#xff0c;对于一个待分类的数据样本&#xff0c;贝叶斯分类器会计算该样本属于每个类别的概率&#xff0c;并将其归为概率最大的那个…

【group by】mysql分组查询的案例和原理

【group by】mysql分组查询的案例和原理 【一】group by的使用场景【二】group by的基本语法【1】基本语法【2】常用的聚合函数&#xff08;1&#xff09;max函数&#xff1a;取出分组中的最大值&#xff08;2&#xff09;avg函数&#xff1a;取出分组中的平均值&#xff08;3&…

时间序列预测 | Matlab基于灰狼算法优化支持向量机(GWO-SVM)的时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于灰狼算法优化支持向量机(GWO-SVM)的时间序列预测 评价指标包括:MAPE、MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %----------------

如何部署项目到Tomcat + 第一个Servlet程序

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 目录 文章目录 一、Tomcat 1.1 Tomcat是什么 1.2 下载安装 1.3 部署项目 二、第一个Servlet程序 2.1 Servlet是什么 2.2 创建Maven项目 2.3 引入依赖 2.4 创建目录 2.5 编写类方法 2.6 打包…

MySQL的一些介绍

1. SQL的select语句完整的执行顺序 SQL Select语句完整的执行顺序&#xff1a; 1、from子句组装来自不同数据源的数据&#xff1b; 2、where子句基于指定的条件对记录行进行筛选&#xff1b; 3、group by子句将数据划分为多个分组&#xff1b; 4、使用聚集函数进行计算&am…