Python的内建数据结构总结
文章目录
- 一、列表List
- 1. 性质
- 2. 方法
- 3. 深拷贝与浅拷贝
- 二、随机模块random
- 三、元组tuple
- 1. 性质
- 2. 初始化操作
- 3. 元组构造列表
- 4. 方法
- 5. namedtuple
- 四、字符串Str
- 1. 性质
- 2. fff 前缀
- 3 . 连接
- 4. 切分
- 5. str.strip()str.strip()str.strip()
- 6. 关于字符串判断
- 7. 其他常用的方法
- 8. 字符串格式化
- 五、bytes和bytearray
- 1. 性质
- 2. bytes与字符串相互转换
- 3. 方法
- 六、集合
- 1. 性质
- 2. 初始化
- 3. 方法
- 七、字典
- 1. 性质
- 2. 初始化
- 3. 常用方法
- 4. 遍历
一、列表List
1. 性质
- 连续编址
- 元素可以任意,可以是数字、字符串、对象、列表等
- 列表是可变的
2. 方法
- index(value) :返回第一个valuevaluevalue匹配的索引,匹配不到抛异常,O(n)
- count(value) :返回列表中valuevaluevalue出现的次数,比较低效,O(n)
- len(list) :返回列表长度,直接返回list中的长度属性,O(1)
- append(value) :list尾部添加valuevaluevalue,无返回值,高效
- insert(index,value) :在索引indexindexindex处插入valuevaluevalue,无返回值
- extend(可迭代对象):将可迭代对象添加到list,无返回值
- remove(value):根据valuevaluevalue删除第一个出现的值,没出现则抛异常,效率低
- pop(index):根据indexindexindex删除第一个出现的值,并返回。无参则删除最后一个,并返回
- clear() : 将当前列表标记为空,引用计数减1
- reverse() :将列表元素反转,无返回值
- sort(key=None, reverse=False):默认升序,keykeykey指一个函数,规定排序方法,无返回值,改变自身列表
- 操作符 in :判断元素是否在列表,返回bool
3. 深拷贝与浅拷贝
浅拷贝:copy(),引用类型就是拷贝地址
l1 = [1,2,3,[10,100]]l2 = l1.copy() # 浅拷贝,l1 = [1,2,3,房间号码A],l2 = [1,2,3,房间号码A]l2[0] = 111 # l2 = [111,2,3,[10,100]], l1 = [1,2,3,[10,100]]l2[3][0] = 222 # l2 = [111,2,3,[222,100]], l1 = [1,2,3,[222,100]]
操作符 “*”
l1 = [1,[10,100]]l2 = l1 * 3 # l1 = [1,房间号码A] l2 = [1,房间号码A,1,房间号码A,1,房间号码A]l2[1][0] = 111 # l1 = [1,[111,100]], l2 = [1,[111,100],1,[111,100],1,[111,100]]
深拷贝:copy.deepcopy()
l1 = [1,2,3,[10,100]]l2 = copy.deepcopy(l1) # 生成全新列表,不再是引用同一个房间号l2[3][0] = 222 # l1 = [1,2,3,[10,100]], l2 = [1,2,3,[222,100]]
二、随机模块random
import randomrandom.randint(1, 3) # [1,3]random.randrange(1, 3) # [1, 3)内的整数lst = list(range(1,10))a = random.choice(lst) # 在列表中随机取一个数random.shuffle(lst) # 就地打乱列表random.sample(lst, 2) # 从列表里随机取两个
三、元组tuple
1. 性质
- 不可变对象
2. 初始化操作
t1 = ()t2 = tuple()t5 = (1) # 错误的初始化操作,只是使用括号改变优先级t3 = (1, [3,4], 'abc', ) # 或 (1, [3,4], 'abc')t4 = tuple(range(10))
3. 元组构造列表
t1 = (1,2,3) * 3l1 = list(t1) # 只是根据元组的值构造了一个新列表 [1, 2, 3, 1, 2, 3, 1, 2, 3]l1[0] = 100 # [100, 2, 3, 1, 2, 3, 1, 2, 3]
4. 方法
- index(value,[start,[stop]]):在指定区间内根据valuevaluevalue返回索引,匹配不到抛异常,O(n)O(n)O(n)
- count(value):返回valuevaluevalue出现的次数,O(n)O(n)O(n)
- len() :返回元组长度,O(1)O(1)O(1)
5. namedtuple
from collections import namedtuplePoint = namedtuple('Point', ['x','y']) # 是namedtuple的子类# Point = namedtuple('Point', 'x y')# Point = namedtuple('Point', 'x, y')type(Point) # type ,Point是type类p1 = Point(4, 5) # Point(x=4, y=5)p1.x = 100 # 不允许修改
四、字符串Str
1. 性质
- 不可变对象,不可修改
- UnicodeUnicodeUnicode类型
2. fff 前缀
格式化字符串,功能等同于format()format()format()函数
x = 1y = 10str1 = f'{x}->{y}' # 1->10,同'{}->{}'.format(x,y)str2 = '{x}->{y}' # {x}->{y}Point = namedtuple('Point', ['x', 'y'])p1 = Point(4, 5)str3 = f'{p1.x}' # '4'
3 . 连接
- str.join(iterable)str.join(iterable)str.join(iterable):用字符串整体将可迭代对象的不同元素(必须是字符串)连接成一个字符串
str1 = ' '.join(['1', '2', 'aa']) # 1 2 aastr2 = ':'.join(map(str, range(9))) # 0:1:2:3:4:5:6:7:8str3 = ':'.join(str(range(9))) # r:a:n:g:e:(:0:,: :9:)str4 = ':'.join(['abc']) # abc
- 操作符 +
重新生成字符串,赋值即重定义
4. 切分
- str.split()str.split()str.split():默认使用空白字符串(包括 \t、\n、1至多个空格 )分割,立即返回列表,原字符串不变
- str.splitlines()str.splitlines()str.splitlines() :用换行符切分,包括 \r、\r\n 、\r
sepsepsep 用于指定分割字符
maxsplitmaxsplitmaxsplit 用于设置最大切割次数
rsplit()rsplit()rsplit() 从右向左切
str1 = ':'.join(map(str, range(5))) # 0:1:2:3:4str1.split() #['0:1:2:3:4'], 默认使用空白字符串(包括\t、\n、1至多个空格)分割,立即返回列表str1.split(':') # ['0', '1', '2', '3', '4']'1 2 3 4'.split() # ['1', '2', '3', '4']'1 2 3 4'.split(maxsplit = 2) # ['1', '2', '3 4']'1 2 3 4'.split(maxsplit = -1) # ['1', '2', '3', '4'],maxsplit = -1表示全部切完'1 2 3 4'.rsplit(maxsplit = 2) # ['1 2', '3', '4']'1\r\n2 3\n'.splitlines() # ['1', '2 3']
- partition()partition()partition():必须指定分隔符,根据分隔符返回三元组(‘左边’,‘分隔符’,‘右边’)。且不到返回元组包括完整字符串、两个空字符
'0:1:2:3:4'.partition(':') # ('0', ':', '1:2:3:4')'0:1:2:3:4'.partition(',') # 切不到, ('0:1:2:3:4', '', '')'0:1:2:3:4'.rpartition(',') # 切不到, ('', '','0:1:2:3:4')
5. str.strip()str.strip()str.strip()
默认去掉strstrstr两侧的空白字符,包括 一至多个空格、\r、\n、\r\n。返回新字符串,原字符串不变,非就地修改
str1 = ' \r\n i am a coder \r 'print(str1.strip()) # 'i am a coder'
参数charscharschars:给一个字符串,切割的时候,碰到第一个非charscharschars里的字符就停止切分
str1 = '\r\n i am a coder\n'print(str1.strip()) # i am a coderprint(str1.strip('\r\ni ')) # am a coder,碰到了a和r停止删除
6. 关于字符串判断
- isalnum()isalnum()isalnum():是否由字母或数字组成
- isalpha()isalpha()isalpha():是否是字母
- isdecimal()isdecimal()isdecimal():是否只包含十进制数字
- isdigit()isdigit()isdigit():是否全部是数字字符
- isidentifier()isidentifier()isidentifier():是否是标识符(标识符要求:以字母或下划线开头,由字母、数字、下划线组成)
- islower()islower()islower():是否全是小写字母
- isupper()isupper()isupper():是否全是大写字母
- isspace()isspace()isspace():是否只包含空白字符(空格、\r\n、\r、\n)
7. 其他常用的方法
- str.lower()str.lower()str.lower()
- str.upper()str.upper()str.upper()
- str.replace(old,new[,count])str.replace(old, new[,count])str.replace(old,new[,count]):返回将strstrstr中的oldoldold子串替换为newnewnew子串,替换countcountcount次的字符串,strstrstr不变,非就地修改
- str.find(sub[,start[,end]])−>intstr.find(sub[,start[,end]])->intstr.find(sub[,start[,end]])−>int:从左往右查找subsubsub第一次出现的索引,找不到返回-1,O(n)O(n)O(n)
- str.rfind(sub[,start[,end])−>intstr.rfind(sub[,start[,end])->intstr.rfind(sub[,start[,end])−>int:从右往左查找subsubsub第一次出现的索引,找不到返回-1,O(n)O(n)O(n)
- str.index(sub[,start[,end])−>intstr.index(sub[,start[,end])->intstr.index(sub[,start[,end])−>int:从左往右查找subsubsub第一次出现的索引,找不到抛异常,O(n)O(n)O(n)
- str.rindex(sub[,start[,end])−>intstr.rindex(sub[,start[,end])->intstr.rindex(sub[,start[,end])−>int:从右往左查找subsubsub第一次出现的索引,找不到抛异常,O(n)O(n)O(n)
- str.count(sub[,start[,end])−>intstr.count(sub[,start[,end])->intstr.count(sub[,start[,end])−>int:在[start,end)[start,end)[start,end)中统计subsubsub出现的次数
- len()len()len():返回字符串长度,O(n)O(n)O(n)
- str.startswith(sub[,start[,end])−>boolstr.startswith(sub[,start[,end])->boolstr.startswith(sub[,start[,end])−>bool:在[start,end)[start,end)[start,end)中的字符串是否以subsubsub开头
- str.endswith(sub[,start[,end])−>boolstr.endswith(sub[,start[,end])->boolstr.endswith(sub[,start[,end])−>bool:在[start,end)[start,end)[start,end)中的字符串是否以subsubsub结尾
8. 字符串格式化
- format()原型format()原型format()原型:format(∗args,∗∗kwargs)−>strformat(*args, **kwargs)->strformat(∗args,∗∗kwargs)−>str
- argsargsargs是可变位置参数,是一个元组
- kwargskwargskwargs是可变关键字参数,是一个字典
'{0} {2}'.format(1,2,['a']) # 1 ['a']'{1} {1} {2[0]} {3[2]}'.format(1,2,['a'],'abc') # 2 2 a c'i am {}'.format(20) # i am 20'{} {server} {} {}'.format('2020-9-12','127.0.0.1',8888, server='web server') # 2020-9-12 web server 127.0.0.1 8888
五、bytes和bytearray
1. 性质
- 字符串是字符组成的有序序列,字符可用编码理解
- bytesbytesbytes是字节组成的 有序的 不可变 的序列
- bytearraybytearraybytearray是字节组成的 有序的 可变 的序列
2. bytes与字符串相互转换
b1 = 'abc'.encode(encoding='gbk') # 默认使用utf-8编码,得到bytes: b'abc'str1 = b1.decode(encoding='gbk') # 默认使用utf-8解码,得到字符串 'abc'b2 = bytes([97,98]) # b'ab'
3. 方法
字符串中的大部分方法都可用
六、集合
1. 性质
- 可变的、无序的、不重复的元素的集合
- 和dictdictdict一样,底层使用hashhashhash值作为keykeykey,时间复杂度为O(1)O(1)O(1),查询时间与数据规模无关
2. 初始化
s1 = set() # 空集合d = {} # 空字典s2 = set(range(1,10))s3 = {2,3,4,2,'a','a'} # 无序,不重,{'a', 2, 3, 4}s4 = {1,'abc', (1,2,), b'abc', None, True} # 不可包含list、bytearray、dict、set等可变数据类型
3. 方法
- add(value)add(value)add(value):一次添加一个元素
- update(iterable1[,iterable2...])update(iterable1[,iterable2...])update(iterable1[,iterable2...]):将多个可迭代对象合并到集合
- intersection(∗other)intersection(*other)intersection(∗other) 和 & : 返回多个集合的交集
- intersection_update(∗others)intersection\_update(*others)intersection_update(∗others) 和 &=:获取多个集合的交集,并就地修改
- difference(∗other)difference(*other)difference(∗other) 和 −-− : 返回多个集合的差集
- difference_update(∗others)difference\_update(*others)difference_update(∗others) 和 −=- =−= :获取多个集合的差集,并就地修改
- remove(value)remove(value)remove(value):根据值删除,不存在则抛 keyerrorkey\quad errorkeyerror
- discard(value)discard(value)discard(value):根据值删除,不存在不抛异常
- pop()pop()pop():随机删除一个元素,空集则抛 keyerrorkey\quad errorkeyerror
- clear()clear()clear():将当前集合标记为空,引用计数减1
- len()len()len():返回元素个数,O(n)O(n)O(n)
- 成员操作符ininin和notinnot\quad innotin:返回是否在集合中,由于哈希原理,时间复杂度为O(1)O(1)O(1)
七、字典
1. 性质
- 可变的、无序的、keykeykey不重复的 k−vk-vk−v 集合
- keykeykey必须是可哈希类型,valuevaluevalue无要求
- 和dictdictdict一样,底层使用hashhashhash值作为keykeykey,时间复杂度为O(1)O(1)O(1),查询时间与数据规模无关
2. 初始化
d1 = {}d2 = dict()d3 = {1:[1,2], 1:'1'} # {1: '1'}d4 = dict([(1,'a'), [2,'b'], {100,'a'}]) # {1: 'a', 2: 'b', 100: 'a'} 或 {1: 'a', 2: 'b', 'a':100}d5 = dict(a=1,b=2,c=3) # {'a': 1, 'b': 2, 'c': 3}d6 = dict(d5, d = 4, e = 5) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}d7 = dict.fromkeys(range(2), [10,11]) # {0: [10, 11], 1: [10, 11]}d7[0][0] = 100 # d7为 {0: [100, 11], 1: [100, 11]}
3. 常用方法
- get(key[,defalut])get(key[, defalut])get(key[,defalut]):根据keykeykey返回valuevaluevalue,若不存在则返回defaultdefaultdefault,defaultdefaultdefault默认为NoneNoneNone
- update()update()update():使用另一个字典更新本字典,keykeykey存在则更新,不存在则添加,就地修改
d = dict(a=1,b=2,c=3) # {'a': 1, 'b': 2, 'c': 3}d.update(b = 300) # {'a': 1, 'b': 300, 'c': 3}d.update({'a':100, 'z':200}) # {'a': 100, 'b': 300, 'c': 3, 'z': 200}d.update([ ('a', 111), ('z',1000) ]) # {'a': 111, 'b': 300, 'c': 3, 'z': 1000}
- pop(key[,default])pop(key[,default])pop(key[,default]) : 根据keykeykey返回valuevaluevalue并删除元素,不存在则返回缺省值 或 抛异常
- popitem()popitem()popitem():随机返回一个元素并删除,无法删除时抛异常
- deldeldel:删除一个元素
- keys()keys()keys():返回字典的键,用可迭代对象封装,类set对象
- values()values()values():返回字典的值,用可迭代对象封装
- items()items()items():返回字典的元素,用可迭代对象封装,类set对象
d = dict(a=1,b=2,c=3) # {'a': 1, 'b': 2, 'c': 3}
del d['a']
4. 遍历
d = dict(a=1,b=2,c=3) # {'a': 1, 'b': 2, 'c': 3}for key in d.keys():print(key)print(d.get(key))for value in d.values():print(value)for item in d.items():print(item)for k, v in d.items():print(k, v)
注意以下错误写法:
- 增
for k in d.keys():d['d'] = 1
- 删
for k in d.keys():d.pop(k)
总之在遍历时,遍历的是 视图对象,字典元素个数不可变化
Python的内建数据结构总结相关推荐
- python的内建数据结构包括_Python中3种内建数据结构:列表、元组和字典
Python中有3种内建的数据结构:列表.元组和字典.参考简明Python教程 1. 列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目.假想你有一个购物列表,上面 ...
- Python中内建模块collections常见用法总结
1.Counter Counter是字典对象的一个子类.Counter()函数是collections模块中的函数,它接收一个可迭代对象,例如list.tuple等,返回一个Counter字典.返回C ...
- Python的内建模块itertools
Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个"无限"迭代器: import itertools na ...
- Python的内建属性和内建函数
python3.5中类的内建属性和方法 经典类(旧式类),早期如果没有要继承的父类,继承里空着不写的类 #py2中无继承父类,称之经典类,py3中已默认继承object class Person:pa ...
- Python常用内建模块——学习笔记
1.datetime:Python处理日期和时间的标准库 引入方法: from datetime import datetime. 第一个datetime是模块,第二个datetime是类. 如果仅导 ...
- Python常用内建模块(内含实例)
文章目录 datetime 获取当前日期和时间 获取指定日期和时间 datetime转化为timestamp timestamp转化为datetime str转化为datetime datetime转 ...
- 【python】内建异常类的层次
内建异常类的层次 BaseException+-- SystemExit+-- KeyboardInterrupt+-- GeneratorExit+-- Exception+-- StopItera ...
- 《python源码剖析》第一部分 作者:陈儒 - python的内建对象 <一>
首先需要明确的是,在Python的世界里,一切都是对象. 一.PyObject PyObject是Python对象机制的基石,一切对象都有相同的PyObject部分. PyObject的定义如下: / ...
- Python学习笔记:常用内建模块4:hmac
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
最新文章
- 对于金融的简单理解(一)
- 清华大学人工智能研究院自然语言处理与社会人文计算研究中心成立,重磅推出两场前沿学术报告和三项特色开源成果...
- php mysql 大量读取_PHP使用PDO从mysql读取大量数据处理详解
- 如何查询SAP Cloud for Customer系统升级和维护时间
- 学习微软企业库的心得-验证
- python爬取b站搜索结果播放地址_如何利用Python快速爬取B站全站视频信息
- HLSL bytecode to GLSL编译器的第一步
- SpringBoot 2.x 集成Redis
- 超炫酷的 Docker 终端 UI lazydocker,想看哪里点哪里
- 2019 - OO第一单元作业总结
- 【tricks】深度神经网络模型训练中的 tricks(原理与代码汇总)
- ZYNQ7020 FPGA如何从Flash启动的详细步骤
- 修改服务器编码和oracle编码,修改oracle 数据服务器编码
- 汽车毫米波雷达测试与测量解决方案
- AI2021下载 Illtrator2021安装教程
- golang switch使用
- 远程桌面连接设置详细步骤
- 移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
- 30个必备英文免费手写字体下载
- Paper写作查重需要注意哪些问题?
热门文章
- 深圳市云海麒麟计算机系统,北京云海麒麟容错服务器解决方案
- 从程序员之死看 IT 人士如何摆脱低情商诅咒——转载自CSDN官方博客
- RuntimeError: Failed to init API, possibly an invalid tessdata path: C:\User
- grunt压缩雪碧图
- android7.1自带壁纸,RK3399 Android7.1 修改壁纸
- linux 端如何修改移动硬盘的名称
- 【网络教程】群晖中如何安装甜糖,手把手教您Docker安装甜糖,如何解决甜糖安装使用中遇到的问题(已解决)
- 个人作业4——alpha阶段个人总结
- 谈谈阿里与谷歌的Java开发规范
- C语言实现数独小游戏