python基础系列教程——数据结构(列表、元组、字典、集合、链表)
全栈工程师开发手册 (作者:栾鹏)
python数据挖掘系列教程
基本顺序存储结构——列表与元组
Python中的基本顺序存储结构是列表与元组,在操作的复杂度上和数组完全相同,其中列表是可变数据类型,元组是不可变数据类型。这里先介绍一下两种数据结构共有的方法:
语法 | 描述 |
---|---|
x in s | 返回布尔值,x在s中 |
x not in s | 返回布尔值,x不在s中为True |
s + t | s和t的拼接,可以+= |
s * n or n * s | n为int类型,返回s重复n次的结果。可以*=,同上 |
s[i] | 返回索引为i的元素 |
s[i:j(:k)] | 切片,返回子数组,从s[i]~s[i-1],k为步长,默认为1. |
len(s) | 现有元素个数 |
min(s) | 最小元素 |
max(s) | 最大元素 |
s.index(x[,i[,j]]) | 在s[i] ~ s[j-1]中,第一个大小为x的元素的索引,i,j默认0,-1 |
s.count(x) | 统计x的数目 |
这些都不涉及对数组内元素的更改,因此是列表和元组都可以使用的。注意元组只能使用以上的方法。
接下来介绍可变有序容器的方法,注意各种方法都有利用切片赋值的实现!
语法 | 描述 |
---|---|
s[i] = x | 赋值操作 |
s[i:j(:k)] = t | 按照切片规则选择元素进行赋值,注意如果t为[]可以用作删除,如果i==j可以用作插入 |
del s[i:j(:k)] | 按照切片规则进行删除 |
s.append(x) | 在尾部插入,等价于s.insert(I,len(s)),复杂度O(1). |
s.clear() | 清空所有元素 (等价于del s[:]) |
s.copy() | 创建一份s的浅拷贝 (等价于 s[:]) |
s.extend(t) or s += t | 在后面插入一组,相当于+=; |
s.insert(i, x) | 在i处插入x (等价于s[i:i] = [x]) |
s.pop([i]) | 默认删除尾部元素,否则删除i处的元素 |
s.remove(x) | 删除第一个等于x的元素 |
s.reverse() | 列表反向 |
此外,列表还独有s.sort(key=None, reverse=None),其中key是一个函数名,也就是比较函数,reverse为布尔值,True的话则会列表反向。
Sort单独列出来是因为如果自己从可变有序容器里面派生的话并没有这个方法。
基本哈希存储结构——字典
字典是基于哈希表的一种映射结构,注意本文中介绍的Python的数据结构并没有任何一种使用了红黑树的搜索结构。python3.6以后字典是有序字典,在python3.6以前有序字典是OrderedDict。
语法 | 描述 |
---|---|
len(d) | 返回字典元素个数 |
d[key] | 返回key对应的value |
d[key] = value | 为字典元素赋值,如果没有则增加元素 |
del d[key] | 删除字典元素 |
key in d/ key not in d | 查看key是否在d中 |
iter(d) | 返回一个迭代器,具有__next__()方法 |
clear() | 清空 |
copy() | 浅复制 |
fromkeys(seq[, value]) | 以seq作为键,value作为值建立字典,默认value为None |
get(key[, default]) | 安全的get方法,如果不存在返回default,如果不指定default则报错 |
items() | 列出一个键值对的view |
keys() | 列出key的view,通常用于遍历 |
values() | Return a new view of the dictionary’s values. |
pop(key[, default]) | Key在d中则删除,和del[key]一样,default如果被指定,那么当不存在key的时候会返回default而不会报错 |
popitem() | 弹出一个键值对,为key的哈希序列中的第一个 |
setdefault(key[, default]) | 安全的添加操作,如果存在就返回value不更改值,如果不存在添加一个key:default的表项,default默认为0 |
update([other]) | 更改操作,other可以是键值对的列表或元组(二级的),也可以是字典,用other中的键值对添加到或替换原有键值对 |
键值相等的字典——集合set与frozenset
在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种。
set无序排序且不重复,是可变的。既然是可变的,所以它不存在哈希值。基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交集), difference(差集)和sysmmetric difference(对称差集)等数学运算.
frozenset是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法。
首先介绍两种集合共有的方法:
语法 | 描述 |
---|---|
len(s) | 集合元素个数 |
x in/not in s | 是否在集合中 |
isdisjoint(other) | 和other的交集为空 |
set <= other | 包含于 |
set < other | 真包含于 |
set >= other | 包含 |
set > other | 真包含 |
set | other | … | 并 |
set & other & … | 交 |
set - other - … | 差 |
set ^ other | 对称差(并-交) |
copy() | 浅拷贝 |
而set独有的方法是,一个是诸如&=之类的运算符,还有:
语法 | 描述 |
---|---|
add(elem) | 增加元素,是把要传入的元素做为一个整个添加到集合中 |
update(list) | 增加元素,是把要传入的元素拆分,做为个体传入到集合中。 |
remove(elem) | 删除元素,不存在则报错 |
discard(elem) | 删除元素,不存在不报错 |
pop() | 删除哈希表第一个元素,空集报错 |
clear() | 清空 |
创建集合set、集合set添加、集合删除、交集、并集、差集的操作都是非常实用的方法。
创建集合set
a = set(['y', 'python', 'b', 'o'])
print(a)
a = set('boy')
print(a)
输出为
{'y', 'o', 'python', 'b'}
{'y', 'o', 'b'}
双向链表deque
就是简单意义上的双向链表(双向队列),注意这里不再支持切片操作了,随机访问的操作保留,可以通过随机访问通过del实现删除,但是没有切片无法用于替换,截取等操作,无法sort:
语法 | 描述 |
---|---|
append(x) | 右侧插入 |
appendleft(x) | 左侧插入 |
clear() | 清空 |
copy() | 浅复制 |
count(x) | 计数 |
extend(iterable) | 按组右侧连接 |
extendleft(iterable) | 按组左侧连接 |
index(x[, start[, stop]]) | 搜索等于x的第一个位置 |
insert(i, x) | 在i处插入x |
pop() | 右侧删除 |
popleft() | 左侧删除 |
remove(value) | 搜索第一个元素并删除 |
reverse() | 队列反向 |
rotate(n) | 前n个队列的尾部元素移动到首部 |
maxlen | 有界情况下返回最大长度 |
python基础系列教程——数据结构(列表、元组、字典、集合、链表)相关推荐
- python列表添加元素的三种方法定义集合数据对象_(1) List,tuple,dictionary,Python语法基础集,一,之,列表,元组,字典,集合...
Python序列(列表.元组.字典.集合) 一.列表(List)与列表推导式 (一)列表(list) 1.列表是Python内置 可变序列 (列表中元素可增加删除或修改): 2.列表元素放在一对中括号 ...
- python列表元组字典集合实验心得_python学习小总结(列表、元组、字典、集合、字符串)...
---恢复内容开始--- 一.列表(list) 1.添加 append():追加,在列表末尾添加元素. 列表名.append(添加的元素) extend():扩展,在列表末尾添加元素. 列表名.ext ...
- python中列表 元组 字典 集合的区别
参考文章:python中列表 元组 字典 集合的区别
- python_列表——元组——字典——集合
列表--元组--字典--集合: 列表: # 一:基本使用# 1.用途:存放多个值 # 定义方式:[]内以逗号为分隔多个元素,列表内元素无类型限制# l=['a','b','c'] #l=list([' ...
- python 高级变量类型(列表/元组/字典/字符串)
前言 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) 真 True 非 0 数 -- 非零即真 假 False 0 复数型 ...
- 【python基础】——数据类型(列表、字典、集合)
骏马金龙--python语法基础 python基础 变量与运算 符号 // % ** 意义 整除 整除取余 幂次方 数据种类 #mermaid-svg-7nSRRijcYFCYwTDr .label{ ...
- python基础系列教程——python基础语法全解
点击此处 python教程全解 了解python 1. 了解Python Python是一种解释型(这意味着开发过程中没有了编译这个环节).面向对象(支持面向对象的风格或代码封装在对象 ...
- Python 基础(二)[列表,字典,文件操作]
本章内容: 列表 & 元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 Python 语言从未如此性感! 列表 Python中最基本的数据结构 Python有6个序列的内 ...
- python入门——列表+元组+字典+集合
列表 列表是最常用的python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 1.列表嵌套(相当于二维数组) a=["b",'c','d'] ...
最新文章
- “重”磅!人造物质量首超全球生物量
- Oracle 查询今天、昨日、本周、本月和本季度的所有记录
- 「高并发秒杀」mysql数据库引擎区别
- 【转】维护工厂库存的一般设置
- python turtle应用实例_turtle库应用实例2-六芒星的绘制
- vmware安装minimal centos报错/etc/rc5.d/s99local : line
- c++ 模板类实现堆栈实验报告_C++类模板实现栈
- 【我的失败人生】1105感到自己的弱小
- c语言编程软件平板_ipad可以编程c语言吗
- PC端 流光溢彩 Arduino
- SpringMVC 406状态码
- ESXI(VSphere)主机补丁离线升级(多图)
- 发现CSDN发带图片的博文好麻烦,测试一下51的
- 几种 Proximity Graphs 的单调性分析
- win7搜索文件内容
- 智能硬件成在线教育救命稻草?
- 互联网老兵谈中国早期黑客的历史(转载)
- 2020写给未来 100w 粉丝的年终总结
- ACM-ICPC 2018沈阳赛区网络预选赛
- Shell编程—日志模块
热门文章
- 语音识别是什么意思_语音识别的翻译_音标_读音_用法_例句_爱词霸在线词典
- 语音识别准确率永远达不到100%?
- css文字竖直显示_CSS属性设置 -- 盒子模型
- Vue前端路由~非常详细哦,不要错过
- vue+echarts 实时跟新数据 仪表盘多个渲染
- Vue3.0 + Ts 项目使用element-plus 自动按需导入 使用v-loading报错
- vue3.0和vue2的区别
- 蓝桥杯2019真题-完全二叉树的权值
- 利用nginx-rtmp搭建视频点播、直播、HLS服务器
- plsql导入数据主键_使用plsql添加数据并自动生成主键