吃水不忘挖井人
首先对河南师范大学的各位老师们说声谢谢。他们是:
张磊老师、张倩倩老师、刘金金老师、郭凌云老师、李晓艳老师、李志先老师、陶华亭老师、周雪燕老师、王爱菊老师、陈劲松老师、黄晓巧老师、夏辉丽老师

第六章 组合数据类型

基本数据类型,包括数值类型、字符串类型、布尔类型等,这些类型能表示一个数据, 这种表示单一数据的类型称为基本数据类型。
实际在计算中,计算机不仅能处理单个变量表示的数据, 更多情况下,计算机需要对一组数据进行批量处理,这就需要能表示多个数据的组合数据类型。

Python语言中常用的组合数据类型有4种:

◼ 列表类型 ◼ 元组类型 ◼ 字典类型 ◼ 集合类型

6.1 列表类型

6.1.1列表的定义

◼ 列表是最常用的python数据类型,列表中的元素之间存在先后关系,
通过序号访问,列表元素类型可以不同,列 表可以包含列表,列表没有长度限制。
◼ 创建列表可以使用中括号[ ]和list( )函数。

◼ 列表的数据项不需要具有相同的类型

>>> s = [3.5,”ABC”,(4,5),[“红”,”绿”,”蓝”],3.5]
>>> t =[[1,2,3,4,5],[5,6,7,8,9]]#列表可以嵌套列表
>>> s =list() #用list()创建空列表
>>> t =[] #用[]创建空列表

list( )将其他类型转变成列表类型。

>>> list(“python”) #把字符转转换为列表
['p', 'y', 't', 'h', 'o', 'n']

6.1.2列表的索引和切片

索引是列表的基本操作,用于获得列表的元素。
列表索引可以用正向递增序号和反向递减序号。

可以使用for循环对列表进行遍历操作,基本使用方式如下:

for <循环变量> in <列表变量>:<语句块>

for循环遍历列表,循环变量依次获得列表中的元素,
对每个列表元素执行一次语句块操作。

>>> s =[1,2,3,"A","B","C"]
>>> for i in s:
print(i*2,end=" ")
2 4 6 AA BB CC

切片是列表的基本操作,用于获得列表的一个片段,
切片有两种方式:
• 列表或列表变量[N: M] 获取列表类型从N到M(不包 含M)的元素
• 列表或列表变量[N: M: K] 获取列表类型从N到M(不 包含M)以K为步长所对应元素

>>> s=[0,1,2,3,4,5,6,7,8,9,10]
>>> s[1:4]
[1, 2, 3]
>>> s[-3:-1]
[8, 9]>>> s=[0,1,2,3,4,5,6,7,8,9,10]
>>> s[1:8:2] [1, 3, 5, 7]
>>> s[::2] [0, 2, 4, 6, 8, 10]
>>> s[::-2] [10, 8, 6, 4, 2, 0]

6.1.3列表的操作

列表操作符和函数
in、not in 判断元素是否在列表中
min( )、 max( )、 列表的最小元素、最大元素
len( ) 、sum( ) 列表元素个数、列表求和
s + t 连接列表s和t
s * n 或 n * s 将列表s复制n次

判断元素是否在列表中:in、not in

>>> T=[1,2,2,4,5]
>>> 1 in T
True
>>> 1 not in T
False

列表的最大值、最小值、长度、求和
• max( )、min( )、len( )、sum( ) 。
>>> T=[1,2,2,4,5]
>>> max(T)
5
>>> min(T)
1
>>> len(T)
5
>>> sum(T)
14

列表连接符 + 、列表复制符 *

>>> S =[3, "ABC", 7.9]
>>> T=[1,2,2,4,5]
>>> S+T
[3, 'ABC', 7.9, 1, 2, 2, 4, 5]
>>> S*2
[3, 'ABC', 7.9, 3, 'ABC', 7.9]

除了前面介绍的列表操作符和函数外,列表还提供 了一些操作方法,
列表类型操作方法的语法形式是:

 <列表变量>.<方法名称>(<方法参数>)

向列表添加元素,有s.append( )、s.insert( )、s.extend( )
• s.append( ) 是在列表最后增加一个元素。

>>> s=["A","B","C"]
>>> s.append(1)
>>> print(s)
['A', 'B', 'C', 1]
>>> s.append([1,2,3])
>>> s
['A', 'B', 'C', 1, [1, 2, 3]]

• s.insert(i, x)在列表中序号i位置上插入元素x。

>>> s=["A","B","C"]
>>> s.insert(1,10)
>>> s
['A', 10, 'B', 'C']

• s.extend( )方法是向列表末尾添加一个列表。

>>> s=["A","B","C"]
>>> t=[1,2,3]
>>> s.extend(t)   # 等价于 s+t
>>> s
['A', 'B', 'C', 1, 2, 3]

◼ 从列表中删除元素有s.remove( )、s.pop( )、del、s.clear( )
• s.pop( )方法将按照指定的位置序号返回元素,并删除元素。
• s.remove( )方法按照指定的元素值删除第一次出现的该元素。

>>> s=[0,1, 2, 2,3]
>>> s.pop(1) #返回序号为1的元素,并从列表中删除该元素 1
>>> s [0, 2, 2,3]
>>> s.remove(2) #删除列表中第一个出现的值为2的元素
>>> s [0,2,3]

• 使用Python保留字del根据索引位置删除列表元素或切片片段。

>>> s=[0,1,2,3,4,5,6]
>>> del s[2]
>>> del s[1:3]
>>> del s[0:7:2]

• s.clear()方法将删除列表的所有元素,清空列表。

>>> s=["A","B","C"]
>>> s.clear()
>>> s
[]

◼ 除上述方法外,可以使用索引和切片配合“=”修改列表 元素或片段。

>>> s=["A","B","C"]
>>> s[1]=2 #使用索引序号修改元素值
>>> s[1:3]=[4,5] #使用切片修改列表片段
>>> s[1:3]=[4,5,6,7] #切片和修改内容长度可以不一致, ”多增少减”即可。

◼ s.copy( )方法是复制列表中所有元素生成一个新列表。修改原 列表元素不影响新生成的列表。
◼ 列表的赋值s= t语句,并不是把t的元素拷贝给s,而是把s和t 所指向同一套内容。t清除元素时,s也会清空。

◼ s.reverse( )方法将列表s中元素逆序。

>>> s=["A","B","C"]
>>> s.reverse()
>>> s ['C', 'B', 'A']

◼s.sort( ) 将列表s中的元素排序,默认升序。

>>> s=[1,3,6,4,2]
>>> s.sort()
>>> s [1, 2, 3, 4, 6]
>>> s.sort(reverse=True)
>>> s [6, 4, 3, 2, 1]

◼ s.index( )返回列表s中第一次出现某个元素的位置
◼ s.count( )返回某元素在列表s中出现的次数

>>>s=[1,2,2,4,5]
>>> s.index(5) #返回第一次出现元素5的位置序号
4
>>> s.count(2) #返回列表s中出现2的次数
2

◼小结:
本节主要讲解了列表类型的定义、索引和切片以及 列表的操作。
列表是一个十分灵活的数据结构,它具有 处理任意长度、混合类型的能力,并提供了丰富的操作符和方法。
程序需要使用组合数据类型管理批量数据时 ,应尽量使用列表类型。

6.2 元组类型

6.2.1元组的定义

 元组与列表类似,不同之处在于元组一旦创建不能修改,可以看做是只读的列表。
元组的元素之间有序,元组的元素类型可以不同,元组可以 包含元组,元组不可改变。

 创建元组使用()或 tuple( )函数

>>> t = („A‟, „B‟, „C‟, „D‟) #用()创建元组
>>> d=((1,2,3,4,5),(6,7,8,9,10))#元组中嵌套元组
>>> e=tuple(range(5,11)) #把序列转换为元组
>>> m=tuple(“python”) #把字符串转换为元组

6.2.2元组的操作

 可以使用索引和切片访问元组元素

>>> t=tuple(range(10))
>>> t[3]
>>> t[1:3]
>>> t[1:9:2]  用del语句删除整个元组 
>>> del  t

6.2.2元组的操作

 元组元素不能增加、删除、修改或排序,
但是可使用与列 表类似的方法获得元组的信息。
• sum( )、max()、min()、len( )
• in 、not in • t.index( )获得元素的序号
• t.count()计算元素出现的次数
这里不再重述,同学们可参照列表的方法学习

小结:
本节主要介绍了元组的定义和元组的操作,元组与列表类 似,元组的一些操作可参照列表学习,
元组与列表的区别是元 组创建后不能改变,可当做只读的列表使用。

6.3 字典类型

6.3.1字典的定义

◼ 字典的元素是一组“键值对”,字典的键值对之间无序且 不能重复。
◼ 字典的键必须唯一,必须是不可变类型,如字符串,整数、 实数、或元组。值可以取任何数据类型,值可以重复. 6.3.1字典的定义
◼ 创建字典使用大括号{ }或dict(…) ,每个元素是一个键值对, 键和值通过冒号连接,不同键值对用逗号间隔。
创建包含姓名和电话的字典。

>>> t={"张雨":"187","李明":"189","王风":"135",   "赵雪":"152"}

可以先创建空字典,逐渐在字典中增加元素 • 创建空字典

>>> d = { }
>>> s= dict()
>>>print(d) { }

6.3.2 字典的索引

◼ 列表类型采用元素的位置序号索引,字典直接利用键索引。 字典索引方式: <值> = <字典变量>[<键>] 6.3.2 字典的索引

>>> d={'A':1,'B':3,'C':5,'D':9}
>>> d['A']
1

◼ 利用键索引和赋值(=),可以修改或增加字典元素

>>> d={'A':1,'B':3,'C':5,'D':9}
>>> d[‘M’]=2 #把键为’M’的元素值改为2,若字典中不存 在则增加此元素
>>> d
{'A': 1, 'B': 3, 'C': 5, 'D': 9, 'M': 2}

6.3.3 字典的操作函数

字典类型常用的操作方法,使用语法形式是:
<字典变量>.<方法名称>(<方法参数>)

◼ d.keys( )方法返回字典d中的所有键信息,返回结果是 Python的一种内部数据类型dict_keys;
◼ d.values( )方法返回字典d中的所有值信息,返回结果是 Python的一种内部数据类型dict_values。

>>> d={'A':1,'B':3,'C':5,'D':9}
>>> d.keys()
dict_keys(['A', 'B', 'C', 'D'])
>>> d.values() dict_values([1, 3, 5, 9])

◼ 可以用list()函数把将字典的键或值转换为列表,
◼ 或使用tuple()把字典的键或值转换为元组。

>>> d={'A':1,'B':3,'C':5,'D':9}
>>> print(list(d)) #把字典的键转换为列表
['A', 'B', 'C', 'D']
>>> print(list(d.values())) #把字典的值转换为列表
[1, 3, 5, 9]

◼ d.items( )方法返回字典d中的所有键值对信息,
返回结果是 Python的一种内部数据类型dict_items。用 list( )函数将字典 转换为列表类型。

>>> d={'A':1,'B':3,'C':5,'D':9}
>>> d.items()
dict_items([('A', 1), ('B', 3), ('C', 5), ('D', 9)])
>>> list(d.items()) [('A', 1), ('B', 3), ('C', 5), ('D', 9)]

◼ d.get(key, default)方法根据键信息查找并返回值信息,
如果 key存在则返回相应值,否则返回默认值,第二个元素default 可以省略,如果省略则默认值为空。

>>> d={'A':1,'B':3,'C':5,'D':9}
>>> d.get('A') 1
>>> d.get('M','无此信息') '无此信息'
>>> d.get('M')

◼ d.pop(key, default)方法根据键查找并取出值,与get()方法类似,
不同的是pop( )在取出相应值后,将从字典中删除对应的键值对。

>>> d={'A':1,'B':3,'C':5,'D':9}
>>> d.pop('A') 1
>>> d {'B': 3, 'C': 5, 'D': 9}
>>> d.pop('A','无此信息')'无此信息‘

◼ d.popitem( )随机从字典中取出一个键值对,以元组(key, value) 形式返回。取出后从字典中删除这个键值对。

>>> d={'A':1,'B':3,'C':5,'D':9}
>>> d.popitem()
('D', 9)
>>> d
{'A': 1, 'B': 3, 'C': 5}

◼ 使用保留字del可以删除字典中某一个元素
◼ d.clear( )方法可以删除字典中所有键值对。
◼ len( )返回字典的元素个数,也称为长度。

>>> d={'A':1,'B':3,'C':5,'D':9}
>>> del d['A']
>>> d.clear()
>>> len(d)

◼ 字典可以用for循环对其元素进行遍历,基本语法结构如下:
for <变量名> in <字典名>
<语句块>
◼ for循环返回的变量名是字典的键。如果需要获得键对应的值,可以在语句块中通过get()方法获得。

>>> t={"张雨":"187","李明":"189","王风":"135","赵雪":"152"}
>>> for k in t:print("联系人包括:{}和{}".format(k, t.get(k)))
联系人包括:张雨和187
联系人包括:李明和189
联系人包括:王风和135
联系人包括:赵雪和152

◼小结:
⚫ 本节主要讲解字典的定义、索引和字典的操作。
字典是非常重要的数据类型,请同学们多加练习。

6.4 集合类型

6.4.1 集合的定义

◼ 集合是包含0个或多个不重复数据项的无序组合。
◼ 集合中元素不可重复,当需要对一维数据进行去重或进行数 据重复处理时,一般通过集合来完成。
◼ 创建集合可以使用大括号{ }或者 set( )函数,set( )函数用来 创建空集合或将其他的数据类型变成集合类型。

>>>S = {3, “ABC”, 7.9, 3}
>>>S
{7.9, 3, 'ABC'}
>>> A=set()
>>> print(A)
set()>>> T=(1,1,2,3,4,4,5,'A','A','B','C')
>>> S=set(T)
>>> S
{1, 2, 3, 4, 5, 'B', 'C', 'A'}

6.4.2 集合的操作

◼集合类型常用的操作符: 交、差、并、补

>>>S = {3, “ABC", 7.9}
>>>T = {5, "ABC", 12.3}

◼ 集合类型常用的操作函数或方法

S = {3, “ABC”, 7.9} #创建集合
>>> S.add(5) # 在集合中增加元素5
>>> S.remove(5) #删除元素5
>>> S.clear() #清除集合的所有元素

◼小结:
⚫ 本节主要讲解集合的定义和操作。
集合的特点是元素无序 不重复,集合常用来辅助去除重复元素。

6.5 实例解析

 教务管理系统中有很多学生的信息,其中包括学生的课程和不 同课程的成绩,我们经常需要一些学生课程戒成绩统计信息。
 学生的成绩表如图所示。

姓名/科目     python     高数  英语
李东         89          97         80
丽丽         68          90         67
张佳         67          84         80
张希         100       79         70
李明         89          90         80
李月         76          60         89

在本实例中我们将介绍输入学生的课程和成绩,并把学生的成 绩表按照某一科目成绩排序。
IPO流程是:
 第一步:输入学生的课程和成绩
 第二走:根据输入的排序要求(排序依据和排序顺序)排序
 第三步:输出排序后的成绩单

第一步:输入学生的课程和成绩
 输入学生的课程信息保存到列表
 输入学生的成绩信息保存到列表

 第二步:根据输入的排序要求(排序依据和排序顺序)排序
 排序依据和排序顺序通过键盘输入获得 
排序依据为课程名称
 排序顺序为升序戒降序
 第三步:输出排序后的成绩单
 输出课程信息和排序后的成绩单

stus=int(input("请输入学生人数:"))
cours=int(input("请输入课程数目:"))
stu=[]
course=["姓名/科目"]
INput(stus,cours)
SORT()
OUTput(stus,cours) def INput(num1,num2):  #输入学生课程和成绩 for i in range(num2): course.append(input("请输入课程名称:")) for m in range(num1): score=[] score.append(input("请输入学生姓名:")) for n in range(num2): print(“请输入{}科目成绩:".format(course[n+1]),end="\t") score.append(eval(input(""))) stu.append(score) print() def SORT():   #按照要求排序k=course.index(input("请输入排序依据(课程名称):"))j=eval(input("请输入排序顺序(升序请输入0,降序请输入1):")) stu.sort(key=lambda x:x[k],reverse=j)

def OUTput(num1,num2): # 输出显示学生课程和成绩
print()
print(“按照要求排序后的成绩:”)
for cour in range(len(course)):
print("{:<10}\t".format(course[cour]),end="")
print()
for student in range(num1):
for cour in range(num2+1):
print("{:<10}\t".format(stu[student][cour]),end="")
print()

输入学生信息并按照python成绩降序排序后的成绩单。
从结 果中你还能发现什么?想要计算其他的统计信息该如何改迚程序 呢?
请感兴趣的同学逐步完善程序。

姓名/科目     python   高数      英语 张希         100       79        70李东         89        97        80李明         89        90        80         李月         76        60        89         丽丽         68        90        67         张佳         67        84        80

河南师范大学python+学习笔记6 组合数据类型相关推荐

  1. 河南师范大学python+学习笔记2 python语言基本语法元素

    吃水不忘挖井人 首先对河南师范大学的各位老师们说声谢谢.他们是: 张磊老师.张倩倩老师.刘金金老师.郭凌云老师.李晓艳老师.李志先老师.陶华亭老师.周雪燕老师.王爱菊老师.陈劲松老师.黄晓巧老师.夏辉 ...

  2. Python学习笔记2 基本数据类型

    第2章 基本数据类型 2.1 数字(Number) 1.Python3支持int.float.bool.complex 2.type()函数可用来查询变量所指对象类型 a=20 type(a) # & ...

  3. python学习笔记2-基本数据类型

    在python3中数据类型是很简单的,对于数值只有整型int和浮点型float(python2中还有long),并没有c/c++中的单双精度类型. 同时认识到一些基本函数的功能 type():显示括号 ...

  4. Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)

    Python学习笔记_1_基础_2:数据运算.bytes数据类型..pyc文件(什么鬼) 一.数据运算 Python数据运算感觉和C++,Java没有太大的差异,百度一大堆,这里就不想写了.比较有意思 ...

  5. OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并

    OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...

  6. Python学习笔记:常用内建模块3:struct

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python学习笔记第二十九天(N维数组(ndarray))

    Python学习笔记第二十九天 N维数组(ndarray) 构建阵列 索引阵列 ndarray的内部内存布局 阵列属性 内存布局 数据类型 其他属性 阵列接口 ctypes外部功能接口 Array方法 ...

  8. Python学习笔记五:控制语句

    Python学习笔记五:控制语句 Pycharm 开发环境的下载安装配置_项目管理 控制语句 Pycharm 开发环境的使用 Pycharm 下载和安装 激活和选择不同UI 风格 创建项目和初始化配置 ...

  9. OpenCV之Python学习笔记

    RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...

  10. PYTHON学习笔记之(一)2020.08

    PYTHON学习笔记之(一)2020.08 Python基础 数据类型 常见的列表.字典,以及元组.集合. 1 列表 list 1.1 列表转换字符串 stu = ['王一', '李二', '张三'] ...

最新文章

  1. linux进程间通信:system V消息队列
  2. 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.47. Gawk-4.1.1...
  3. 将图片保存到系统相冊的两种方法
  4. 一文详解 SpringBoot 多数据源中的分布式事务
  5. 使用yolov5训练PASCAL VOC2012数据集以及遇到的坑
  6. 关于kafka中ISR、AR、HW、LEO、LSO、LW的含义详解
  7. windows 10 删除远程桌面连接IP记录
  8. 计算机系统保密检查整改情况函,民政局保密工作整改情况的报告
  9. 嵌入式Linux--全志V3s--NOR Flash的使用(二)移植Nor Flash
  10. gitlab-runner配置与注册
  11. 【美港探案】百度Q2:需要重新定义
  12. hadoop是什么?新手自学hadoop教程(一)
  13. JAVA 建造者模式
  14. 苹果震撼发布首款头显,搭配强悍Mac和iOS 17等全新产品,价值25000元!
  15. win7家庭版和旗舰版区别_win7家庭版和旗舰版区别
  16. 1.2 国内外研究现状与水平
  17. 众安保险今正式上市,读懂其背后的黑科技就读懂其何为金融科技第一股
  18. vue项目回车删除数据(踩坑记录)
  19. (翻译)2022 年免费的 4 个最佳文本到语音在线工具
  20. 科目三 靠边停车30cm 与 车内点位

热门文章

  1. 任正非,马云,马化腾:真正顶级厉害的人,都有一个共同特点
  2. 谨慎选择我们的先验 - 对最优拟合概率分布搜索空间的一种约束
  3. 【LGP5108】仰望半月的夜空
  4. 在移动硬盘中安装WIN10
  5. 安防领域名词explain
  6. 第十六届全国大学生智能车竞赛创意组获奖名单 | 带有学生与指导教师信息
  7. 使用html打开电脑前置摄像头并拍照
  8. P1004 方格取数
  9. java程序定时运行
  10. 网上大多数原理总结,UDP打洞原理