Python中有两种可以遍历的容器类型。

  1. 序列类型:包含字符串、列表、元祖
  2. 映射(哈希)类型:包含字典、集合

序列类型是线性表,就像数组一样,是在内存中开辟一块连续空间,连续存储的,那么查找某个元素时就需要从头开始租个对比,因此序列的查询效率是O(n),即一个长度为n的序列查询一个变量是否在其中一般需要n次操作。

映射类型是散列表,是基于哈希(Hash)算法的,变量在映射中的存储位置是通过计算得出来的,存取时,通过Hash计算出其应该存放的位置,存入,查找时,通过Hash计算其存放的位置,取出,因此映射类型的查询效率是O(1),即无论数据量多大,查询永远只需要一次操作。

在Hash算法中,不同的变量计算出的位置是唯一的,而为了同一个变量每次计算出的位置不变,就要求变量是不可变的类型。

在Python中不可变的类型包括:None、数字(整型、浮点型、布尔型)、字符串、元祖,即可哈希的。而列表、字典、集合这些容器类型,长度是不固定的,因此是不可哈希的,即不可作为Hash的键。

Python的字典是一种非常典型的Hash类型(Java中称为HashMap),即由定长的key计算出地址存放value。因此字典的key支持None、数字(整型、浮点型、布尔型)、字符串、元祖。
以下都是合法的字典。

{'name': 'kevin', 'age': 12, 'skills': ['python', 'java']}
{1: 'kevin', 2: 'eric'}
{True: 1, False: 0, None: -1}
{('kevin', 'cn'): {'name': 'keviin', 'age': 12}}

当我们只需要存储key不需要value时就得到一个集合类型,如

s = {'hello', 'hi', 'how are you'}
print(type(s))

打印出来是集合set类型。

注意:创建空集合不能用s = {},这样s是字典类型,空集合应使用s = set()创建。

身为一种哈希类型,集合中的元素同样要求是定长的,即可哈希的,支持None、数字(整型、浮点型、布尔型)、字符串、元祖几种类型,同时集合中的元素不可重复。
在日常使用中,相对于列表、字典来说集合的出镜率不高,然而通过集合可以高效的完成一些操作,如。

1.列表去重(注意会改变原有顺序)

l = [3,2,1,5,6,3,2,6,1,4]
l2 = list(set(l))

转为集合是会自动去重并排序,在转回列表得到[1, 2, 3, 4, 5, 6]。

2. 交集、并集、差集

这就是我们中学学的集合运算,在两组数据对比时是非常有效的,比如我们有两组数据。

l1 = ['kevin', 'eric', 'lily', 'niudun', 'sofia', 'lisi']
l2 = ['sofa', 'sofia', 'zhangsan', 'wangwu', 'lisi']

如何快速找出两者的差异呢?

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 转为集合
s1 = set(l1)
s2 = set(l2)# 并集:两者中全部的,并去重
all = list(s1 | s2)     # 得到 ['niudun', 'sofa', 'sofia', 'zhangsan', 'wangwu', 'lisi', 'lily', 'eric', 'kevin']# 交集:两者重复的部分
same = list(s1 & s2)   # 得到 ['lisi', 'sofia']# 差集:l1中有l2没有的
diff = list(s1 - s2)  # 得到  ['lily', 'eric', 'kevin', 'niudun'], 也可以`s2-s1`得到l2中有l1中没有的

同样,字典的.keys()得到的字典的所有键值是一种类似集合的类型,当字典每一个value值不包含可变类型(即没有嵌套列表、字典)时,字典的.items()方法同样支持集合操作。

d1 = {'name': 'kevin', 'age': 14, 'gender': 'male', 'class': 15, 'grade': 9, 'chinese': 94, 'math': 63, 'english': 82}
d2 = {'english': 82, 'age': 14, 'class': 15, 'chinese':94,'name': 'kevin', 'gender': 1, 'zhengzhi': 79, 'grade': 9}

假设我们要对比两组数据的不同

# d1中有d2中没有的key
d1.keys() - d2.keys()   # 得到 {'math'}# d2中有的d1中没有的key
d2.keys() - d1.keys()  # 得到 {'zhengzhi'}# d1中和d2中不同的项目
```python
d1.items() - d2.items()   # {('math', 63), ('gender', 'male')}
d2.items() - d1.items()   # {('zhengzhi', 79), ('gender', 1)}

使用.items()做集合操作时要求字典无嵌套列表、字典等可变类型

Python中的高效的集合操作相关推荐

  1. Python中一些高效的数据操作

    1.列表统计 chars = ["a", "b", "a", "c", "a", "d&q ...

  2. python中tolist_高效的张量操作 Pytorch中就占5种

    PyTorch是一个基于Python的科学包,用于使用一种称为张量的特殊数据类型执行高级操作. 虽然也有其他方式可以实现相同的效果,但今天分享的这5个操作更加方便高效,值得一试. 什么是张量? 张量是 ...

  3. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  4. Python精讲:在Python中添加和删除集合元素详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中添加和删除集合元素详解>.本知识点主要讲的是添加和删除元素,包括:在Python中向集合里面添加元素可以使用 ...

  5. python操作目录_详解python中的文件与目录操作

    详解python中的文件与目录操作 一 获得当前路径 1.代码1 >>>import os >>>print('Current directory is ',os. ...

  6. python中列表 元组 字典 集合的区别

    参考文章:python中列表 元组 字典 集合的区别

  7. python中判断字符串的常用操作

    python中字符串的大小写转换操作 方法名 操作说明 isidentifier() 判断指定字符串是不是合法的标识符(例如字母.下划线) isspace() 判断字符串是否全部由空白字符组成 isa ...

  8. python中字符串大小写转换常用操作

    python中字符串的大小写转换操作 方法名 操作说明 upper() 把字符串中的字符全部转换为大写 lower() 把字符串中的字符全部转换为小写 swapcase() 把原字符串中的字符,大写变 ...

  9. python中返回上一步操作_通过实例解析Python文件操作实现步骤

    当程序运行时,变量是保存数据的好方法,但变量.序列以及对象中存储的数据是暂时的,程序结束后就会丢失,如果希望程序结束后数据仍然保持,就需要将数据保存到文件中. Python 提供了内置的文件对象,以及 ...

最新文章

  1. WPF 3D中多个模型如何设置某一个在最前?
  2. 雅客EXCEL(6)-通用表格格式、销售实际案例(总结之前的知识点)
  3. Flash Builder 找不到所需的 Adobe Flash Player
  4. linux共享内存变量 tiaojianbianliang,低压集抄系统中Linux共享内存使用分析
  5. Drupal 紧急修复已遭利用的严重 0day
  6. vim配置之目录结构
  7. Phoenix 映射 HBase + Maven
  8. 网站克隆工具-httrack安装使用教程
  9. java: Compilation failed: internal java compiler error
  10. java lazy_在Java8中模拟Lazy
  11. 美团店铺评价语言处理以及分类(tfidf,SVM,决策树,随机森林,Knn,ensemble)...
  12. Jenkins使用FTP上传文件报错问题处理
  13. 宝宝大战落幕,互联网金融二战爆发
  14. 【算法】整数拆分问题
  15. 信息驾驶舱(管理驾驶舱)
  16. 设计模式:(状态模式)
  17. Springboot 项目整合自定义日志文件
  18. 非计算机专业计算机教学考试,非计算机专业计算机基础课教学改革的探索和实践...
  19. 数字图像学笔记——14. 图像退化与复原(线性退化)
  20. Mac硬盘管理器:Paragon Hard Disk Manager for Mac

热门文章

  1. 两数组的交集(无重复)Intersection of Two Arrays
  2. 【PHP】Sublime下PHP网站开发指南
  3. 方法中的参数的五种形式
  4. web页面 float定位导致“溢出现象”处理
  5. 【学习笔记】17、函数(Function)的定义和调用
  6. FOR ALL ENTRIES IN内表排序、排重对性能的影响
  7. 致远表单代办状态删除
  8. 45、Power Query-缺少功能区选项卡
  9. abap程序(成本分析报表)
  10. 直播变局下百度移动生态新“野望”