python集合问题大合集

2023-05-16

1.python 多维列表初始化

Python的列表相比于c++,很坑爹的一点是如果访问未赋值列表单元的位置,是不能直接访问的(而c++有默认值为0),例如:

lis = list(list())
lis[1][1]

这是会报错的,会提示你out of range 了。

这时如果我们想要用lis[i][j]添加列表元素是不行的,因此我们需要为列表赋初值(当然,仅限于已知列表尺寸的情况)

我们可以用2种方法对其进行初始化,以二维数组为例:

方法1:

lis = [[None]*m]*n

这种方法会导致该列表的每个子列表都指向相同的,也就是改了lis[i][1],lis[j][1]也会改,不推荐

方法2:

lis = [[None for i in range(m)]for j in range(n)]

这种方法不会导致上述问题,并能初始化大小为n*m的列表(注意:这里越外面的尺寸,越顶层,即代表越【靠前】的[]的最大值)。并且能够用.append()在后面加东西。

2.collections模块

collections是Python内建的一个集合模块,提供了许多有用的集合类和方法。包括以下类型的变量

['ChainMap', 'Counter', 'Mapping', 'MutableMapping', 'OrderedDict', 'UserDict', 'UserList', 'UserString', '_Link', '_OrderedDictItemsView', '_OrderedDictKeysView', '_OrderedDictValuesView', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__getattr__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_chain', '_collections_abc', '_count_elements', '_eq', '_heapq', '_iskeyword', '_itemgetter', '_nt_itemgetters', '_proxy', '_recursive_repr', '_repeat', '_starmap', '_sys', 'abc', 'defaultdict', 'deque', 'namedtuple']

常用方法有如下几种

2.1 deque :

xxx = collections.deque([iterable[, maxlen]])

高效增删改双向列表,类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)

  • iterable :迭代对象,可以是字符串,列表等可迭代对象。

  • maxlen : maxlen 没有指定或者是 None , deque 可以增长到任意长度。否则, deque 就限定到指定最大长度。一旦限定长度的 deque 满了,当新项加入时,同样数量的项就从另一端弹出。

方法

append(x):添加 x 到右端。

appendleft(x):添加 x 到左端。

clear():移除所有元素,使其长度为0.

copy():创建一份浅拷贝。3.5 新版功能.

count(x):计算deque中个数等于 x 的元素。3.2 新版功能.

extend(iterable):扩展deque的右侧,通过添加iterable参数中的元素。

extendleft(iterable):扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加。

index(x[, start[, stop]]):返回第 x 个元素(从 start 开始计算,在 stop 之前)。返回第一个匹配,如果没找到的话,升起 ValueError 。3.5 新版功能.

insert(i, x):在位置 i 插入 x 。如果插入会导致一个限长deque超出长度 maxlen 的话,就升起一个 IndexError 。3.5 新版功能.

pop():移去并且返回一个元素,deque最右侧的那一个。如果没有元素的话,就升起 IndexError 索引错误。

popleft():移去并且返回一个元素,deque最左侧的那一个。如果没有元素的话,就升起 IndexError 索引错误。

remove(value):移去找到的第一个 value。 如果没有的话就升起 ValueError 。

reverse():将deque逆序排列。返回 None 。3.2 新版功能.

rotate(n=1):向右循环移动 n 步。 如果 n 是负数,就向左循环。如果deque不是空的,向右循环移动一步就等价于 d.appendleft(d.pop()) , 向左循环一步就等价于 d.append(d.popleft()) 。

Deque对象同样提供了一个只读属性:
maxlen:Deque的最大尺寸,如果没有限定的话就是 None 。

2.2 defaultdict :

需要from collections import defaultdict:或import collections,调用时用collections.defaultdict

作用:当使用dic[key]时,如果没有需要的key,传统dict会报错,而defaultdict不会,他会给出一个默认值作为值,而这个默认值的内容及格式可以自己设定

核心公式 dict = defaultdict(默认格式

默认格式如:int,float,set,str,list等

3.字典及其方法

字典是能够实现搜索时间复杂度O(1)的数据类型,由键值对组成,其键具有唯一性(所以不知道有了dict还要set干金毛)

3.1初始化

dic = dict() 

dic={}

3.2 增、改(其他放在方法里)

dic[key] = value

3.3 其他方法

删除
del dic[key] #删除指定键值对
dic.clear()#清空字典,但字典仍然保留
val  = dic.pop(key, item )#删除指定键值对,并且将删除 赋给变量(也可以不接收);如果dic中没有这个key,val = item
val = dic.popitem()#随机删除一个字典中的键值对,并把值赋给val

索引或新增

temp = dic.setdefault(key,val)

如果dic中有key,temp会等于value;如果没有,temp会等于val,并且dic中会新增key:val的键值对。

而如果是 temp = dic.get(key,val),则字典内不会新增键值对,其他同上

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python集合问题大合集 的相关文章

随机推荐

  • 【ROS学习】节点运行管理launch文件的基本操作

    launch文件的概念和作用 launch 文件是一个 XML 格式的文件 xff0c 可以启动本地和远程的多个节点 xff0c 还可以在参数服务器中设置参数 launch文件的作用是 xff1a 简化节点的配置与启动 xff0c 提高RO
  • 系统提示“该设备无法启动(代码:10)”,USB设备不能开始工作怎么办?

    文章来源 xff1a https www reneelab com cn this device cannot start html 目录 原因分析解决方法一 xff1a 在设备管理器中更新驱动程序解决方法二 xff1a 重新安装有问题的U
  • printf 在Linux终端上输出彩色字体 (串口也适用)

    有时我们希望在LINUX终端上按照调试级别打印不同颜色的调试信息 xff0c 如 include lt stdio h gt define DBG PRINT format arg do fprintf stdout 34 ld d fla
  • vSLAM重读(4): OKVIS--KeyFrame-based Visual-Inertial SLAM

    1 摘要 视觉传感器与IMU传感器互补 61 61 gt VIO系统 xff1b 由最初的以滤波为主题 xff0c 现在逐渐转换为非线性优化来实现SLAM xff1b 提出一种方法将视觉信息与IMU测量数据紧密结合 xff0c 将IMU的误
  • vSLAM重读(5): vSLAM中对双目相机的数据处理及与单目相对比

    1 双目相机概述 双目立体视觉模型 双目模型求取深度 双目立体相机分别校准可参考 ROS 单目相机 分别校准 双目立体匹配算法案例 https www cnblogs com riddick p 8486223 html https www
  • ROS回顾学习(11): TF之static_transform_publisher

    主要用于静态坐标转换 两种发布形式 1 俯仰角 43 位置坐标 span class token comment static transform publisher x y z yaw pitch roll frame id child
  • 菜鸟专学:从头到尾创建自己的SLAM系统

    RobotSlamApplication项目二 xff1a 小型SLAM系统 研究背景 xff1a 因为之前比较浮躁 xff0c 总是喜欢研究别人的库然后测试跑通 xff0c 效果好就拿来修修改改 然后测试测试就用 xff0c 效果不好就抛
  • 伽马分布与 贝塔分布

    伽马函数 称 为伽马函数 xff0c 其中参数 xff0c 伽马函数具有如下性质 xff1a n为自然数 xff1b 或写作 余元公式 xff1a 对于 有 与贝塔函数 的关系 对于 伽马函数是严格凹函数 x足够大时 xff0c 可以用St
  • Hanoi汉诺塔步骤实现图示说明(C程序设计,例7.8)

    一 题目 古代有一个梵塔 塔内有3个座A B C 开始时A座上有64个盘子 盘子大小不等 大的在下 小的在上 如下图所示 有个老和尚想把这64个盘子从A座移到C座 但规定每一次只允许移动一个盘 且在移动过程中在3个座上都始终保持大盘在下 小
  • PX4飞行模式整理

  • docker打包、部署、添加用户组

    docker的打包与部署 参考文章 xff1a link 1 xff0c 查看当前正常运行的容器 docker ps docker ps a 显示所有容器 xff0c 包括未运行容器 2 xff0c 将正在运行的容器打包成镜像 docker
  • 树莓派VNC连接失败,认证界面无法输入用户名

    文章目录 问题背景思考 xff1a 解决方法 xff1a 第一步 xff1a 使用命令新建桌面 xff1a 第二步 xff1a vnc客户端连接时 xff0c 并且指定桌面号连接成功 xff01 优化方案 xff1a 参考引用 问题背景 由
  • vue按钮获取元素

    下面展示一些 内联代码片 64 click 61 34 search event 34 search e 获取所有元素 console log e 获取文字 console log e currentTarget innerText
  • ORBSLAM2在Ubuntu20.04&ROS noetic下配置与测试

    在解决问题过程中看了很多大佬的文章 总结一下资源及bug及bug可能有效的解决方案 有些忘了 1 bug 最常见的应该是编译器版本不同和库文件版本不同导致的语法差异 1 1 Eigen版本问题 CMakelist 44行改为find pac
  • 虚拟机开机黑屏(硬盘空间不足)

    1 现象 开机后正常运转 xff0c 出现 11 548785 piix4 smbus 0000 00 07 3 SHBus Host Controller not enabled i12 241671 sd 32 0 0 0 sda As
  • slam报错大讲堂

    1 g2o链接文件找不到 error while loading shared libraries libg2o csparse extension so cannot open shared object file No such fil
  • initramfs错误导致无法进入系统

    说是不正常关机 导致的错误 总之就是开不了机了 并且弹出对话框 不知道输入啥 查网上说要 strong span style color 4da8ee fsck t ext4 dev sda1 span strong 但是没有卵用 其实到这
  • ubuntu下vscode 突然打不开

    https stackoverflow com questions 51027327 ubuntu 18 04 var lib snapd has other write 40777 报错如下 xff1a var lib snapd has
  • 普罗米修斯踩坑解法大合集

    主流1 仿真环境下报错 Not arming geofence RTL requiers valid home xff1b 以及Compass Sensors inconsistent等 去年买的跑个仿真还有地理围栏和校准传感器 xff0c
  • python集合问题大合集

    1 python 多维列表初始化 Python的列表相比于c 43 43 xff0c 很坑爹的一点是如果访问未赋值列表单元的位置 xff0c 是不能直接访问的 xff08 而c 43 43 有默认值为0 xff09 xff0c 例如 xff