python组合数据类型


编程总是如此,当基础知识越学越多的时候,就会开始搞混以及忘记,最近发现了博客真的是个好东西,因此想在这里写一写python中的组合数据类型(mooc嵩老师课程)

总体框架图如下所示:
在这里插入图片描述

集合类型

  1. 无序,每个元素不一样,元素不可更改,不能是可变类型(万一就变成两个元素一样了)
  2. 用{}表示,元素间用逗号分隔
  3. 建立集合用{}或者set()(此处是括号不是大括号)
  4. 建立空集合必须用set(),因为{}用于建立空字典类型
>>>A = {"python", 123, ("python",123)}
{123, 'python', ('python', 123)}
>>>B = set("pypy123")
{'1', 'p', '2', '3', 'y'}

集合间操作

来自嵩老师课件

集合处理方法

操作函数或方法描述
S.add(x)如果x不在集合S中,将x增加到S
S.discard(x)移除S中元素x,如果x不在集合S中,不报错
S.remove(x)移除S中元素x,如果x不在集合S中,产生KeyError异常
S.clear()移除S中所有元素
S.pop()随机返回S的一个元素,更新S,若S为空产生KeyError异常
S.copy()返回集合S的一个副本
len(S)返回集合S的元素个数
x in S判断S中元素x,x在集合S中,返回True,否则返回False
x not in S判断S中元素x,x不在集合S中,返回True,否则返回False
set(x)将其他类型变量x转变为集合类型

集合应用场景

数据去重:集合类型所有元素无重复
如下例:获得用户输入的一个整数N,输出N中所出现不同数字的和。例如:用户输入 123123123,其中所出现的不同数字为:1、2、3,这几个数字和为6。

a = set(input())
sum = 0
for i in a:
    sum = sum + eval(i)
print(sum)

值得注意的是用for函数遍历序列类型时,不需要加range,range是数值时才加。

序列类型

  1. 序列是一维元素向量,元素类型可以不同
  2. 类似数学数列,S0,S1…
  3. 元素间由序号引导,通过下标访问序列的特定元素
    序列类型包含:(1)字符串类型(2)元组类型(3)列表类型

序号定义

来自嵩老师课件

序列类型通用操作符

操作符及应用描述
x in s如果x是序列s的元素,返回True,否则返回False
x not in s如果x是序列s的元素,返回False,否则返回True
s+ t连接两个序列s和t
s * n 或n * s将序列s复制n次
s[i]索引,返回s中的第i个元素,i是序列的序号
s[i: j]或s[i: j: k]切片,返回序列s中第i到j以k为步长的元素子序列
len(s)返回序列s的长度,即元素个数
min(s)返回序列s的最小元素,s中元素需要可比较
max(s)返回序列s的最大元素,s中元素需要可比较
s.index(x) 或s.index(x, i,j)返回序列s从i开始到j位置中第一次出现元素x的位置
s.count(x)返回序列s中出现x的总次数

字符串类型

  1. 字符串由一对单引号或一对双引号表示;由一对单引号或双引号表示,仅表示单行字符串,由一对三单引号或三双引号表示,可表示多行字符串,当系统检测到三单引号的数据并没有进行赋值操作时,系统会判定这是注释。
  2. 字符串的特殊字符转义符\:①转义符表达特定字符的本意
>>>这里有个双引号(\")
这里有个双引号(")

②转义符形成一些组合,表达一些不可打印的含义:"\b"回退"\n"换行(光标移动到下行首) "\r" 回车(光标移动到本行首)

字符串操作符和处理函数

操作符及使用描述
x + y连接两个字符串x和y
n * x 或x * n复制n次字符串x
x in s如果x是s的子串,返回True,否则返回False
len(x)长度,返回字符串x的长度
str(x)任意类型x所对应的字符串形式str(1.23)结果为"1.23" str([1,2])结果为"[1,2]"
hex(x) 或oct(x)整数x的十六进制或八进制小写形式字符串hex(425)结果为"0x1a9" oct(425)结果为"0o651"
chr(u)x为Unicode编码,返回其对应的字符
ord(x)x为字符,返回其对应的Unicode编码
str.lower() 或str.upper()返回字符串的副本,全部字符小写/大写
str.split(sep=None)返回一个列表,由str根据sep被分隔的部分组成"A,B,C".split(",") 结果为['A','B','C']
str.count(sub)返回子串sub在str中出现的次数
str.replace(old, new)返回字符串str副本,所有old子串被替换为new"python".replace("n","n123.io") 结果为"python123.io"
str.center(width[,fillchar])字符串str根据宽度width居中,fillchar可选"python".center(20,"=") 结果为'=======python======='
str.strip(chars )从str中去掉在其左侧和右侧chars中列出的字符,如下例"= python= ".strip(" =np") 结果为"ytho"
str.join(iter)在iter变量除最后元素外每个元素后增加一个str",".join("12345") 结果为"1,2,3,4,5" 主要用于字符串分隔等
str.find()返回该字符串第一次出现的索引/位置
str.rfind()返回该字符串最后一次出现的索引/位置

字符串类型的格式化

在这里插入图片描述

元组类型:

  1. 一旦创建就不能被修改,虽然不能修改元组的元素,但可以给存储元组的变量赋值,即重新定义整个元组
  2. 使用小括号() 或tuple() 创建,元素间用逗号, 分隔
  3. 可以使用或不使用小括号

列表类型

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

列表类型操作函数和方法

注:每当需要访问最后一个列表元素时,都可使用索引-1。 这种方式只有在针对空列表的时候会出现错误。

函数或方法描述
ls[i] = x替换列表ls第i元素为x
ls[i: j: k]= lt用列表lt替换ls切片后所对应元素子列表
del ls[i]删除列表ls中第i元素
del ls[i: j: k]删除列表ls中第i到第j以k为步长的元素
ls+= lt更新列表ls,将列表lt元素增加到列表ls中
ls*= n更新列表ls,其元素重复n次
len(ls)获得列表长度
ls.append(x)在列表ls最后增加一个元素x
ls.clear()删除列表ls中所有元素
ls.copy()生成一个新列表,赋值ls中所有元素
ls.insert(i,x)在列表ls的第i位置增加元素x
ls.pop(i)将列表ls中第i位置元素取出并删除该元素,并让你能够接着使用它。
ls.remove(x)将列表ls中出现的第一个元素x删除,可以接着使用他
ls.reverse()将列表ls中的元素反转(永久性,再用一次就可恢复)
list.index(x[, start[, end]])index() 函数用于从列表中找出某个值第一个匹配项的索引位置。x-- 查找的对象。start-- 可选,查找的起始位置。end-- 可选,查找的结束位置。
ls.extend()对原列表增加多个元素,直接修改原有列表
ls.sort(reverse = False)永久性地修改列表元素的排列顺序,要逆向排序将reverse改成True
sorted(ls,reverse = False)临时排序,不影响它们在列表中的原始排列顺序。

如果你不确定该使用de1语句还是pop()方法,下面是一个简单的判断标准:如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用de1语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。

字典类型

映射是一种键(索引)和值(数据)的对应,字典类型是“映射”的体现

  1. 字典是键值对的集合,键值对之间无序
  2. 采用大括号{}和dict()创建,键值对用冒号: 表示
    {<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>}
  3. []既可以索引也可以赋值
  4. python字典中,值可任意更改;但键是唯一的,不支持直接修改。可以间接修改,比如删了重新放一对进去。
  5. 使用字典来存储用户提供的数据或在编写能自动生成大量键-值对的代码时,通常都需要先定义一个空字典。

字典类型操作函数和方法

函数或方法描述
del d[k]删除字典d中键k对应的数据值,删除的键-值对永远消失了。
k in d判断键k是否在字典d中,如果在返回True,否则False
d.keys()返回字典d中所有的键信息
d.values()返回字典d中所有的值信息
d.items()返回字典d中所有的键值对信息(元组)
d.get(k, <default>)键k存在,则返回相应值,不在则返回<default>值
d.pop(k, <default>)键k存在,则取出相应值,不在则返回<default>值
d.popitem()随机从字典d中取出一个键值对,以元组形式返回
d.clear()删除所有的键值对
d.setdefault(key,value)如果key存在,不会修改数据,如果key不存在,新新建键值对
d.update(字典2)将字典2的数据合并到字典1
len(d)返回字典d中元素的个数

字典类型应用场景

例如:统计数据出现的次数,数据是键,次数是值,如下例人名最多数统计

s = '''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖 
       杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙 
       金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍 
       鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰 
       阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰 
       乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王 
       忽必烈 慕容复 张三丰 赵敏 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正 
       李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复 
       逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣 
       洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复 
       黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄 
       张三丰 令狐冲 赵敏 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫 
       洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈 
       完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱 
       郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲 
       谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉 
       双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏 
       逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄 赵敏'''
ls = s.split()
d = {}
for i in ls:
    d[i] = d.get(i, 0) + 1
max_name, max_cnt = "", 0
for k in d:
    if d[k] > max_cnt:
        max_name, max_cnt = k, d[k]
print(max_name)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值