概述
文章目录
- 知识导图
- 组合数据类型的基本概念
- 集合类型概述
- 序列类型概述
- 映射类型概述
- 列表类型
- 列表的定义
- 列表的索引
- 列表的切片
- 列表类型的操作
- 列表的操作函数
- 列表的操作方法
- 字典类型
- 字典的索引
- 字典类型的操作
- 字典的操作函数
- 字典的操作方法
- 课后习题
知识导图
组合数据类型的基本概念
Python语言中最常用的组合数据类型有3大类,分别是集合类型、序列类型和映射类型。
集合类型概述
集合类型是一个元素集合,是无序组合,用大括号{}表示,集合中的元素可以动态的增加或减少。集合中的元素不可重复,元素类型只能是不可变数据类型,如:整数、浮点数、字符串、元组等,相比而言,列表、字典和集合类型本身都是可变数据类型,不可作为集合的元素。
集合的输出顺序与定义顺序可以不一样,由于集合元素是独一无二的 ,使用集合类型可以过滤掉重复元素。
T={"1010",12.3,1010}
print(T)
结果
{12.3, 1010, '1010'}
T={"1010",12.3,1010,1010,1010}
print(T)
结果
{'1010', 12.3, 1010}
集合类型有4个操作符,交集(&),并集(|),差集(-),补集(^),如下表
集合类型有一些常用的操作函数或方法,如下表
set(x)函数将其他的组合数据类型变成集合类型,set()函数也可以生成空集合变量。
S=set('知之为知之不知为不知')
print(S)
for i in S:
print(i,end="")
结果
{'不', '之', '为', '知'}
不之为知
序列类型概述
序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。本语言中又很多数据类型都是序列类型,比较重要的是字符串类型、列表类型和元组类型。
序列类型通用操作符和函数。如下表
元组类型是序列类型的重要组成之一。
t=(1,2,3)
print(type(t))
结果
<class 'tuple'>
元组一旦定义就不能修改。因此在一些编程中,通常以列表类型替代元组类型使用。元组类型主要在Python语法相关的场景使用。例如,当函数返回多个值时,多个返回值以元组类型返回,实际上是返回一个数据类型。
def f(x):
return x,x+1,x+2
print(f(1))
print(type(f(1)))
结果
(1, 2, 3)
<class 'tuple'>
映射类型概述
映射类型是“键—值”数据项组合,即元素(key,value),元素之间是无序的。
列表类型
列表的定义
列表是有序序列,属于序列类型。列表可以进行元素的增加,删除,替换、查找等操作。元素类型可以不同。可通过list(x)函数将集合或字符串类型转换成列表类型。
list()函数可生成空列表。
print(list('列表可由字符串生成'))
结果
['列', '表', '可', '由', '字', '符', '串', '生', '成']
列表的索引
索引号不能超过列表的元素范围,否会产生IndexError错误。
>>> ls=[1010,"1010",[1010,"1010"],1010]
>>> ls[3]
1010
>>> ls[-2]
[1010, '1010']
>>> ls[5]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
ls[5]
IndexError: list index out of range
可以使用遍历循环对列表类型的元素进行遍历操作,基本使用方式如下:
for <循环变量> in<列表变量>
<语句块>
ls=[1010,"1010",[1010,"1010"],1010]
for i in ls:
print(i*2)
结果
2020
10101010
[1010, '1010', 1010, '1010']
2020
列表的切片
<列表或列表变量>[N:M:K]
切片获取列表类型从N到M(不包含M)以K为步长所对应元素组成的列表。
>>> ls=[1010,"1010",[1010,"1010"],1010]
>>> ls[1:4]
['1010', [1010, '1010'], 1010]
>>> ls[-1:-3]
[]
>>> ls[-3:-1]
['1010', [1010, '1010']]
>>> ls[0:4:2]
[1010, [1010, '1010']]
列表类型的操作
列表的操作函数
min(ls)和max(ls),使用这两个函数的前提是列表中各元素类型可以进行比较。如果列表元素间不能比较,使用这两个函数将会报错。
list(x)将变量x转变成列表类型,其中x可以是字符串类型,也可以是字典类型。
>>> list({"小明","小红","小白","小新"})
['小红', '小明', '小新', '小白']
>>> list({"201801":"小明","201802":"小红","201803":"小白"})
['201801', '201802', '201803']
列表的操作方法
其操作方法,语法形式:
<列表变量>.<方法名称>(<方法参数>)
ls.copy()复制ls中所有元素生成一个新列表。
lt=[1010,"1010",[1010,"1010"],1010]
ls=lt.copy()
lt.clear() #清空lt
print(ls)
结果
[1010, '1010', [1010, '1010'], 1010]
通过直接赋值方式不能产生新列表,仅能够为列表加一个别名。
lt=[1010,"1010",[1010,"1010"],1010]
ls=lt #仅使用等号
lt.clear() #清空lt
print(ls)
结果
[]
使用切片配合等号(=)可以对列表片段进行修改,修改内容可以不等长。当使用一个列表改变另一个列表值时,Python不要求两个列表的长度一样,但遵循“多增少减”的原则。
lt=[1010,"10,10","python"]
lt[1:2]=[1010,10.10,0x1010]
print(lt)
lt[1:4]=[1010]
print(lt)
[1010, 1010, 10.1, 4112, 'python']
[1010, 1010, 'python']
字典类型
每个元素是一个键值对,使用方式如下
{<键1>:<值1>,<键2>:<值2>,…,<键n>:<值n>}
字典的索引
字典中键值对的索引模式如下
<值>=<字典变量>[<键>]
d={"201801":"小明","201802":"小红","201803":"小白"}
print(d["201802"])
小红
字典是存储可变数量键值对的数据结构,值可以是任意数据类型,键只能为不可变数据类型,通过键索引值,并可以通过键修改值。
字典类型的操作
字典的操作函数
字典的操作方法
使用语法形式
<字典变量>.<方法名称>(<方法参数>)
d.popitems() 随机从字典中取出一个键值对,以元组形式返回,同时将该键值对从字典中删除。
d.get(key.default)第二个元素default可以省略,如果省略则默认值为空。
d={"201801":"小明","201802":"小红","201803":"小白"}
>>> d.get('201801')
'小明'
>>> d.get('201804')
>>> d.get('201804','不存在')
'不存在'
字典可以遍历循环对其他元素进行遍历,基本语法结构如下:
for <变量名> in <字典名>:
语句块
for 循环返回的变量名是字典的索引值。如果需要获得键对应的值,可以在语句块中通过get()方法获得。
d={"201801":"小明","201802":"小红","201803":"小白"}
for k in d:
print("字典的键和值分别是:{}和{}".format(k,d.get(k)))
结果
字典的键和值分别是:201801和小明
字典的键和值分别是:201802和小红
字典的键和值分别是:201803和小白
课后习题
- 英文字符频率统计。编写一个程序,对给定字符串中出现的a~z字母频率进行分析,忽略大小写,采用降序方式输出。
txt=input("请输入一段英文字符串:")
txt=txt.lower() #将字母变成小写
d={}
for i in txt:
if i in "abcdefghigklmnopqrstuvwxyz":
d[i]=d.get(i,0)+1 #字典中的值,如果i在d中,则返回i对应的值;如果i不在d中,返回0
ls=list(d.items()) #将字典转换成记录列表
ls.sort(key=lambda x:x[1],reverse=True) #排序用的
for i in range(len(d)):
word,count=ls[i]
print("{:<10}{:<5}".format(word,count))
结果
请输入一段英文字符串:dhnesammxmopwedjqmsdqdssaaq
d 4
s 4
m 4
a 3
q 3
e 2
h 1
n 1
x 1
o 1
p 1
w 1
- 中文字符频率统计。编写一个程序,对给定字符串中出现的全部字符(含中文字符)频率进行分析,采用降序方式输出。
txt=input("请输入一段中文字符串:")
d={}
for ch in ',。“”;!?':
txt=txt.replace(ch," ") #将特殊字符转换成空格
for i in txt:
d[i]=d.get(i,0)+1 #字典中的值,如果i在d中,则返回i对应的值;如果i不在d中,返回0
ls=list(d.items()) #将字典转换成记录列表
ls.sort(key=lambda x:x[1],reverse=True) #排序用的
for i in range(len(d)):
word,count=ls[i]
print("{:<10}{:<5}".format(word,count))
结果
请输入一段中文字符串:我是中国人,我很自豪自己是中国人。
我 2
是 2
中 2
国 2
人 2
2
自 2
很 1
豪 1
己 1
- 随机密码生成。编写程序在26个字母大小写和9个数字组成的列表中随机生成10个8位密码。
import random
s = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"0","1","2","3","4","5","6","7","8","9"] #根据要求定义列表元素范围,无要求时也可定义字符串更方便
for i in range(10): #循环10遍,生成10组密码
for i in range(8):
print (random.choice(s),end="") #random.choice(seq)实现从序列或集合seq中随机选取一个元素
print("n") #每输出一组后,换行输出下一组
结果
lcr4ld2M
OpWGJZDT
GwiaGaqB
15JOlPEI
MN5abIXi
qugDm2fY
H6BH2tzN
1WyViiw6
5dWOwU6a
0fb7xqmv
- 重复元素判定。编写一个函数,接收列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和输出测试结果的程序。(这个得用Ctrl+C结束运行)
def Lbpd(a): #定义函数Lbpd(a)
a =a.split(" ") #对参数a按照空格进行分词
if len(a)==len(set(a)): #利用集合的不重复性,比较列表a和集合a的长度
return "False,这是非重复序列" #如相同则返回非重复序列
else:
return "True,这是重复序列" #如不同则返回重复序列
t = f = 0 #重复序列和非重复序列次数初始赋值
while True: #让程序循环运行
a =input("请输入一组序列,以空格隔开:")
print(Lbpd(a)) #调用函数,打印函数参数为a时的返回值
if Lbpd(a)=="True,这是重复序列": #统计重复序列次数
t +=1
if Lbpd(a)=="False,这是非重复序列": #统计非重复序列次数
f +=1
print("重复序列{}次,非重复序列{}次".format(t,f)) #打印输出统计结果语句
结果
请输入一组序列,以空格隔开:[10,20,10] [10,20,10]
True,这是重复序列
重复序列1次,非重复序列0次
请输入一组序列,以空格隔开:[11,12,14] [11,12,14]
True,这是重复序列
重复序列2次,非重复序列0次
请输入一组序列,以空格隔开:[11,12,13] [14,15,16]
False,这是非重复序列
重复序列2次,非重复序列1次
请输入一组序列,以空格隔开:
- 重复元素判定续。利用集合的无重复性改编上一个程序,获得一个更快更简洁的版本。
ls = eval(input("请输入一个列表:"))
if ls != list(set(ls)):
print(True)
else:
print(False)
结果
请输入一个列表:[10,20,10]
True
>>>
=================== RESTART: C:/Users/lenovo/Desktop/程序运行.py ===================
请输入一个列表:[10,20,30]
False
最后
以上就是醉熏钢笔为你收集整理的组合数据类型知识导图组合数据类型的基本概念列表类型列表类型的操作字典类型字典类型的操作课后习题的全部内容,希望文章能够帮你解决组合数据类型知识导图组合数据类型的基本概念列表类型列表类型的操作字典类型字典类型的操作课后习题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复