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()方法删除并返回字典中第一个元素

Python3常用数据结构相关推荐

  1. Python3常用系统函数帅哥定制版

    Python3常用系统函数JSON帅哥定制版 没错,这里的帅哥指的就是我自己 安装 安装pip3 wget --no-check-certificate https://pypi.python.org ...

  2. Python 基础(6)(常用数据结构)

    https://www.toutiao.com/a6634514748694069763/ 2018-12-14 08:10:00 常用数据结构 1)元组 元组是一种静态的数据结构,无法修改,若要修改 ...

  3. iOS标准库中常用数据结构和算法之内存池

    上一篇:iOS标准库中常用数据结构和算法之位串 ⛲️内存池 内存池提供了内存的复用和持久的存储功能.设想一个场景,当你分配了一块大内存并且填写了内容,但是你又不是经常去访问这块内存.这样的内存利用率将 ...

  4. 中常用的数据结构_C语言实现常用数据结构:基本概念(第0篇

    写在前面:为什么学习C语言数据结构 今天开始,我准备和一起分享学习C语言常用数据结构,这里不求事无巨细的掌握数据结构的方方面面,而是学习编程.考试等实际中常用的重要数据结构,这里以分享可以运行的代码为 ...

  5. 【转】常用数据结构及复杂度

    常用数据结构的时间复杂度 Data Structure Add Find Delete GetByIndex Array (T[]) O(n) O(n) O(n) O(1) Linked list ( ...

  6. Python 基础常用数据结构

    2019独角兽企业重金招聘Python工程师标准>>> 常用数据结构 1)元组 元组是一种静态的数据结构,无法修改,若要修改只能重新生成新的元组. 输出结果: 元组元素的获取是通过索 ...

  7. 动图 + 源码,演示 Java 中常用数据结构执行过程及原理

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  8. 几张动态图捋清Java常用数据结构及其设计原理

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  9. java set第n位_数据结构与算法——常用数据结构及其Java实现

    本文采用Java语言来进行描述,帮大家好好梳理一下数据结构与算法,在工作和面试中用的上.亦即总结常见的的数据结构,以及在Java中相应的实现方法,务求理论与实践一步总结到位. 常用数据结构 数组 数组 ...

最新文章

  1. 表的垂直拆分和水平拆分
  2. linux设置默认时区,关于linux:如何修改-Linux-默认时区
  3. TextView属性大全
  4. 方法参数的值调用+引用调用+深浅拷贝
  5. Linux版本号含义
  6. 自由软件基金会称DRM被用于锁定、控制和监视用户
  7. GPS定位冷启动和热启动的区别
  8. 设计模式GOF23之单例模式
  9. 做爬虫的一些技术观点-第450期
  10. ECSHOP获取当前分类下商品的品牌列表
  11. 《图论及其应用》期末复习汇总
  12. 【设计模式系列】--单例模式
  13. paypal 国际版网站集成
  14. 用html写一个道歉的代码
  15. Linux---shell---猜数字游戏
  16. 简易购物车实体类的设计
  17. 在linux中使用tcpdump命令 – 监听网络流量
  18. 小程序如何本地去水印,基于很多小白写的教程
  19. stm32f407_hal库_工程模板
  20. 阿里云ESC云盘挂载

热门文章

  1. Android 获取ROOT权限原理解析
  2. STS插件_ springsource-tool-suite插件各个历史版本
  3. [urllib]urlretrieve在python3
  4. 【SQL】分组数据,过滤分组-group by , having
  5. Codeforces Round #102 (Div. 1) A. Help Farmer 暴力分解
  6. Gridview一次更新所有记录
  7. android /data/data/数据作用,android 清除data/data/ 下其他应用的数据
  8. qt往mysql中添加数据_qt往数据库添加数据
  9. linux java jar war_简单介绍Java 的JAR包、EAR包、WAR包区别
  10. java arraylist排序_最全Java集合笔记