Python3常用数据结构

Python3中有三种组合数据类型,分别为:

  • 序列类型:字符串(str)、元组(tuple)、列表(list)
  • 集合类型:集合(set)
  • 映射类型:字典(map)

序列类型

Python序列类似于其他语言中的数组。支持双向索引。第一个元素为0,最后一个元素为-1
在这里插入图片描述

列表

内置可变序列,所有元素放在一对中括号中,并用逗号分隔。当列表元素增加或者删除时,列表对象自动进行扩展或者收缩内存,保证元素之间没有缝隙。一个列表中的元素可以各不相同

创建和删除

使用=直接将一个列表赋值给变量即可创建列表对象。也可以使用list()函数将元组、range对象、字符串和其他类型的可迭代对象转化为列表
当列表不再使用时可以用del命令删除整个列表。如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。

元素的增加

  • 使用+运算符将元素添加到列表中(严格意义上来讲,这并不是真的为列表添加元素,而是创建一个新列表并将原列表中的元素和新元素依次复制到新列表的内存空间,因此效率较慢
  • 使用append()方法,原地修改列表,效率较高
  • 直接修改序列变量将会改变所指向的内存地址,而不是改变其所指向内存中的值。
  • 原地操作(通过下标修改、通过序列本身提供的方法)将不会改变所指向的内存地址
    在这里插入图片描述
  • extend()方法可以将另一个迭代对象的所有元素添加至该列表对象尾部。属于原地操作
  • insert()方法可以将元素添加至列表的指定位置。需要移动后面所有的元素,效率较低。
  • 使用乘法扩展列表对象
    在这里插入图片描述
    当被扩展列表中的元素是引用的时候,扩展后的列表中的元素是相等的引用,如果对其中某一个引用所指向的地址空间进行修改,指向同一片区域的引用对应的值也会修改,根本原因在于乘法操作所进行的是浅复制,后面有对浅复制的介绍
    在这里插入图片描述

元素的删除

  • 使用del命令删除列表中指定位置上的元素 ,原地操作
  • 使用列表的.pop()方法删除并返回元素,默认删除最后一个位置的元素
  • remove()方法删除首次出现的指定元素,如果不存在抛出异常
    在这里插入图片描述
    解决方法,可以使用x[:]深复制,详见我之前的博客:Python a和a[:]的区别
    或者使用del从后往前进行删除
    在这里插入图片描述

元素的访问和计数

  • 使用下标访问,如果超出范围则抛出异常
  • 使用index()方法获取指定元素首次出现的下标。若不存在指定元素抛出异常
  • 使用count()方法统计指定元素在列表对象中出现的次数

切片操作

适用于列表、元组、字符串、range对象
语法:list[begin:end:step]返回一个新列表
在这里插入图片描述

切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表
通过切片操作可以修改和删除列表中的部分元素,甚至可以通过切片操作为列表对象增加元素

在这里插入图片描述切片操作是原位操作,不会修改所指向的地址空间

在这里插入图片描述
切片操作是一种浅复制
浅复制:把子列表的引用复制到新列表中,这样的话修改任何一个都会影响另外一个
在这里插入图片描述
当我们对某个元素进行修改的时候其实修改的是他的引用,如果我们修改的是引用所指向的空间,那么所有指向该空间的值都会发生改变

排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的reversed对象好像只能访问一次

常用方法

在这里插入图片描述

常用内置函数

  • len(列表)返回列表中元素的个数
  • max() min()返回最大元素或者最小元素
  • sum()对列表元素进行求和,同样适用于元组、range
    在这里插入图片描述
  • zip()返回可迭代的zip对象
    在这里插入图片描述
  • enumerate()枚举列表元素,返回枚举对象,其中每个元素为包含下标和值的元组。该函数对元组、字符串同样有效

列表推导式

在列表推导式中使用多个循环实现多序列元素的任意组合,并且可以结合条件语句过滤特定元素
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

元组

元组和列表类似,但属于不可变序列
和列表的区别:

  • 元组中的数据一旦定义就不允许更改,也没有对应的修改的方法
  • 从效果上看,tuple()冻结列表,而list()融化元组
    优点:
  • 速度比列表快
  • 不需要担心被修改,更安全
  • 元组可以当作字典键(特别是包含字符串、树枝和其他元组这样不可变数据的元组)。列表永远不能当作字典键使用,因为列表是可变的。

创建与删除

  • 使用=将一个元组赋值给变量,需要注意的是一个元素的时候必须在元素后面加上逗号,否则将会当作里面的元素
  • 使用tuple()函数将其他序列转换为元组
  • 使用del删除元组对象,不过不能删除元组中的元素

序列解包

在这里插入图片描述

集合

集合是无序可变序列,使用一对大括号界定,元素不可重复,用一个集合中每个元素都是唯一的。

集合中只能包含数字、字符串、运足等不可变类型(可哈希类型)的数据,而不能包含列表、字典、集合等可变类型的数据

创建和删除

  • 等号赋值
  • set()函数进行转换,而且会自动去重
  • 使用del删除整个集合
  • 使用pop()弹出并删除其中一个元素,remove()方法直接删除指定元素,clear()方法清空集合

集合操作

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

字典

字典是无需可变序列,是实现键值对映射的数据结构
字典是一个键值对的集合,该集合以键为索引,一个键对应一个值信息。字典中的键可以为任意不可变元素,如整数、实数、复数、字符串、元组等。
定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号中
globals()返回包含当前作用域内所有全局变量和值的字典
locals()返回包含当前作用域内所有局部变量和值的字典

创建和删除

  • 等号赋值

在这里插入图片描述

  • 使用dict()利用已有数据创建字典
    在这里插入图片描述在这里插入图片描述

元素的读取

  • 以键作为下标可以读取字典元素,若键不存在则抛出异常
  • get()方法获取指定键对应的值,并且在键不存在的时候返回指定值
    在这里插入图片描述
  • 使用items()方法可以返回字典的键、值对列表
  • 使用key()方法返回键列表
  • 使用values()方法返回字典的值列表
    在这里插入图片描述

元素的添加和修改

  • 以指定键为下标为字典赋值时,若键存在则修改该键的值,若不存在则添加一个键值对
  • 使用update()方法将另一个字典的键值对添加到当前字典对象
    在这里插入图片描述
  • 使用del删除字典中指定键的元素
  • 使用pop()方法删除并返回指定键的元素
  • 使用clear()方法删除字典中的所有元素
  • 使用popitem()方法删除并返回字典中第一个元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP第四次挥手为什么要等待2MSL

当客户端进入TIME-WAIT状态的时候(也就是第四次挥手的时候),必须经过时间计数器设置的时间2MSL(最长报文段寿命)后,才能进入关闭状态,这时为什么呢??? 这最主要是因为两个理由: 1、为了保证客户…

计算机网络【一】概述+OSI参考模型

网络概述 局域网:覆盖范围小(100m以内),自己花钱买设备,带宽固定(10M,100M,1000M),自己维护(接入层交换机直接连接电脑、汇聚层交换机直接连接接入层交换机) 广域网:距离远,花钱买服务,租带宽&…

单链表逆序的多种方式

https://www.cnblogs.com/eniac12/p/4860642.htmltemplate<class T> void List<T>::Inverse() {if(first NULL) return;LinkNode<T> *p, *prev, *latter; p first->link;   // 当前结点prev NULL;   // 前一结点l…

socket编程 -- epoll模型服务端/客户端通信的实现

https://blog.csdn.net/y396397735/article/details/50680359 本例实现如下功能&#xff1a; 支持多客户端与一个服务端进行通信&#xff0c;客户端给服务端发送字符串数据&#xff0c;服务端将字符串中小写转为大写后发送回客户端&#xff0c;客户端打印输出经转换后的字符串。…

Python3 面向对象程序设计

类的定义 Python使用class关键字来定义类 class Car:def infor(self):print("This is a car") car Car() car.infor()内置方法isinstance()来测试一个对象是否为某个类的实例 self参数 类的 所有实例方法都有一个默认的self参数&#xff0c;并且必须是方法的第一…

计算机网络【二】物理层基础知识

计算机网络的性能 速率&#xff1a;连接在计算机网络上的主机在数字信道上传送数据位数的速率&#xff0c;也成为data rate 或bit rate&#xff0c;单位是b/s,kb/s,Mb/s,Gb/s。 我们平时所讲的宽带的速度是以字为单位的&#xff0c;但是实际中应用一般显示的是字节 &#xff0…

Linux网络编程——tcp并发服务器(多进程)

https://blog.csdn.net/lianghe_work/article/details/46503895一、tcp并发服务器概述一个好的服务器,一般都是并发服务器&#xff08;同一时刻可以响应多个客户端的请求&#xff09;。并发服务器设计技术一般有&#xff1a;多进程服务器、多线程服务器、I/O复用服务器等。二、…

求序列第K大算法总结

参考博客&#xff1a;传送门 在上面的博客中介绍了求序列第K大的几种算法&#xff0c;感觉收益良多&#xff0c;其中最精巧的还是利用快速排序的思想O(n)查询的算法。仔细学习以后我将其中的几个实现了一下。 解法 1&#xff1a; 将乱序数组从大到小进行排序然后取出前K大&a…

Linux网络编程——tcp并发服务器(多线程)

https://blog.csdn.net/lianghe_work/article/details/46504243tcp多线程并发服务器多线程服务器是对多进程服务器的改进&#xff0c;由于多进程服务器在创建进程时要消耗较大的系统资源&#xff0c;所以用线程来取代进程&#xff0c;这样服务处理程序可以较快的创建。据统计&a…

计算机网络【三】物理层数据通信

物理层传输媒介 导向传输媒体&#xff0c;比如光纤和铜线 双绞线&#xff08;屏蔽双绞线STP 五屏蔽双绞线UTP&#xff09;电线扭曲在一起可以降低互相之间的电磁干扰 同轴电缆 (50欧姆的基带同轴电缆&#xff0c;75欧姆的宽带同轴电缆) 10M和100M网络只使用了四根线&#xf…

02_算法分析

02_算法分析 0.1 算法的时间复杂度分析0.1.1 函数渐近增长概念&#xff1a;输入规模n>2时&#xff0c;算法A1的渐近增长小于算法B1 的渐近增长随着输入规模的增大&#xff0c;算法的常数操作可以忽略不计测试二&#xff1a;随着输入规模的增大&#xff0c;与最高次项相乘的常…

Linux网络编程——I/O复用之select详解

https://blog.csdn.net/lianghe_work/article/details/46506143一、I/O复用概述I/O复用概念&#xff1a;解决进程或线程阻塞到某个 I/O 系统调用而出现的技术&#xff0c;使进程不阻塞于某个特定的 I/O 系统调I/O复用使用的场合&#xff1a;1.当客户处理多个描述符&#xff08;…

Linux网络编程——tcp并发服务器(I/O复用之select)

https://blog.csdn.net/lianghe_work/article/details/46519633与多线程、多进程相比&#xff0c;I/O复用最大的优势是系统开销小&#xff0c;系统不需要建立新的进程或者线程&#xff0c;也不必维护这些线程和进程。代码示例&#xff1a;#include <stdio.h> #include &l…

操作系统【二】死锁问题以及处理方法

死锁的概念 死锁&#xff1a;在并发环境下&#xff0c;个进程因为竞争资源而造成的一种互相等待对方手里的资源&#xff0c;导致各进程都阻塞&#xff0c;无法向前推进的现象。 区别&#xff1a; 饥饿&#xff1a;由于长期得不到想要的资源进程无法向前推进的现象。死循环&a…

Linux网络编程——I/O复用之poll函数

https://blog.csdn.net/lianghe_work/article/details/46534029一、回顾前面的selectselect优点&#xff1a;目前几乎在所有的平台上支持&#xff0c;其良好跨平台支持也是它的一个优点select缺点&#xff1a;1.每次调用 select()&#xff0c;都需要把 fd 集合从用户态拷贝到内…

操作系统【一】进程同步和信号量

基本概念 进程异步性特征&#xff1a;各并发执行的进程以各自独立的&#xff0c;不可预知的速度向前推进。 进程同步又称作直接制约关系&#xff0c;他是指为完成某种任务而建立的两个或者多个进程&#xff0c;这些进程因为需要在某些位置上协调他们的工作顺序而产生的制约关…

计算机网络【四】数据链路层基本概念+点到点通信(PPP协议)

数据链路层基本概念 路由器是网络层设备 数据链路层&#xff1a;数据管道&#xff0c;传输的是数据包加上发送地址&#xff0c;接收地址&#xff0c;校验的数据帧 数据链路层的信道类型&#xff1a; 点到点信道&#xff1a;使用一对一的点到点通信方式&#xff08;两个设备…

Linux网络编程——tcp并发服务器(poll实现)

https://blog.csdn.net/lianghe_work/article/details/46535859想详细彻底地了解poll或看懂下面的代码请参考《Linux网络编程——I/O复用之poll函数》 代码&#xff1a;#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#…

Linux网络编程——I/O复用函数之epoll

https://blog.csdn.net/lianghe_work/article/details/46544567一、epoll概述epoll 是在 2.6 内核中提出的&#xff0c;是之前的 select() 和 poll() 的增强版本。相对于 select() 和 poll() 来说&#xff0c;epoll 更加灵活&#xff0c;没有描述符限制。epoll 使用一个文件描述…