视频原文:Set Practice: learning from Python's set types - PyCon 2019,PPT在这,作者为《流畅的 Python》作者 LucianoRamalho

set是 Python 非常重要的一种数据结构,不能包含相同的元素,几乎所有用过 Python 的人都知道, set有进行列表去重的功能。

但是鲜有人意识到了 set 在数学概念上的意义,那就是集合,能进行交集、并集这些操作。很多时候使用 set把问题抽象成一个集合问题,能使问题既简单又高效。

来看一下不同语言对于 set的支持情况:Python、.Net、Ruby 都很好地支持了 set数据结构。

0x00 Set 基础知识

set comprehension

in 查询

时间复杂度为 O(1),应该 set 内部使用的是 hash table,所以判断元素在不在集合里面速度非常快。 in操作在底层实际上调用的是 set__contains__方法。

早期的 Python 事实上也是没有 set 的,那时候用的是 dict 来模拟 set。

集合操作

python 内置了很多 operators,能让你像运算数学公式一样操作操作集合。

第20行是德摩根定律。

methods

上述的 operators 底层是 set 定义的很多实用方法,下图在《流畅的 Python》里面有:

非数学相关的方法:

ABC

collections.abc定义了 Set数据结构, setmutableset都实现了 Setinterface。

0x01 Case 1

需求:查询所有满足这种需求的商品:商品的描述信息中保护 query 中出现过的所有单词。(display product if all words in the query appear in the product description.)

go 语言中是没有 set 这种数据结构的,判断语句如下: found flag 用来判断是不是要结束循环。嵌套循环很不优雅!

事实上这是一个集合问题,假设商品的描述为集合 D,查询语句为集合 Q,问题就变成了判断是否满足 Q ⊂ D。

0x02 Case 2

需求:标记所有 favorited 且不在购物车的商品。

事先让你写一个方法,你第一反应是和我一样,用循环来解决吗?比如这种:

chart_list = []
def filter_goods(goods_list):ret = []for goods in goods_list:if goods.favorited and goods not in charts_list:ret.append(goods)return ret

这其实可以有更优雅的方法,可以把这个问题抽象成一个数学集合问题,设所有标记为喜欢的商品为集合 F,在购物车的商品为集合 C,那么要求的就是 F 和 非C 的交集∩。

如果你像我一样真正热爱计算机科学,喜欢研究底层逻辑,欢迎关注我的微信公众号:

winform list集合怎么 in过滤_你有真正把 Python Set 当作数学集合吗?相关推荐

  1. python集合的运算、不使用有的运算符_无序的集合:Python中的数学集合运算

    全文共8958字,预计学习时长23分钟 图源:unsplash set是Python中无序的集合,它可以用于计算标准数学运算,例如交集.并集.差集和对称差集,Other集合(例如列表.元组和字典)不支 ...

  2. python列表元组字典集合实验心得_python学习小总结(列表、元组、字典、集合、字符串)...

    ---恢复内容开始--- 一.列表(list) 1.添加 append():追加,在列表末尾添加元素. 列表名.append(添加的元素) extend():扩展,在列表末尾添加元素. 列表名.ext ...

  3. java.util.list源码_关于fest-util源码包Collections集合工具类过滤、判空、格式化及复制克隆处理...

    一.前言 关于fest-util源码包org.fest.util.Collections集合处理类,实现对数组转换List序列集合.集合duplicatesFrom克隆复制.集合判空isEmpty.并 ...

  4. winform list集合怎么 in过滤_python3基础04字典(dict)和集合(set)

    "pythonic生物人"的第37篇分享. 原创不易,点个"赞"或"在看"鼓励下呗! 摘要 本节梳理python中另外两种容器字典(dict ...

  5. Magento模型集合addFieldToFilter常用过滤条件

    下载: 深入理解Magento.pdf 记录一下Magento模型集合Model Collection中addFieldToFilter()方法常用的过滤条件.以下参数也同样适用于产品实体的addAt ...

  6. python集合的概念_用Python中的集合Set讲解演示高一数学集合的概念

    数学编程不分家,用Python可以方便的表示高中数学知识.现在以集合为例进行讲解,高一数学设计集的概念,讲解了交并补的相关知识,用Python中的集合类型可以方便的表示.同时可以借助数学知识更好的理解 ...

  7. java对list筛选_java8特性快速对list集合的筛选过滤和计算

    java8特性快速对list集合的筛选过滤和计算 一.准备工作 1.创建一个Student对象 package com.shiro.test.java8特性; import java.io.Seria ...

  8. java8特性快速对list集合的筛选过滤和计算

    java8特性快速对list集合的筛选过滤和计算 一.准备工作 1.创建一个Student对象 package com.shiro.test.java8特性;import java.io.Serial ...

  9. java stream 8 常用的操作集合 求和 排序 过滤 拿出对象元素组成集合

    举个例子拿一个教师给学生开家长会Java实体 解释 stream 流操作集合建立在内存之上非常的快 以下列举 常用的操作方法 @Data public class OpenClass {private ...

最新文章

  1. 日本CG大神又整活了!3D建模软件拿来搞面部实时捕捉,网友:效果好得有点吓人...
  2. DC workshop指导篇1- Setup and Synthesis Flow
  3. C++ STL 容器 vector
  4. MySQL 过滤重复数据
  5. Notification使用详解之一:基础应用
  6. python mongodb查询速度优化_Mongodb 3 查询优化(语句优化、建索引)
  7. 并行程序设计导论pdf电子书_并行程序设计导论
  8. 服务器后台怎么修改网站图片,网站后台修改图片
  9. VPS云主机的定义和基本优势有哪些
  10. 文献阅读笔记怎么写?
  11. 手机更新显示itunes store无法连接服务器,iPhone无法连接App Store、iTunes Store?解决方法有哪些?...
  12. 多元统计分析及R语言建模(第四版)-----数据,包,资源
  13. java runnable执行完_java – 如何停止Runnable计划在一定数量的执行后重复执行
  14. 【西欧经济史第二版】【4】第一章 导言
  15. CorelDRAW2022体验标准版
  16. 为什么要配环境变量 ? 环境变量是个啥 ?
  17. linux如何访问公司网盘,Linux部署私有企业网盘
  18. Arduino制作俄罗斯方块小游戏(三)程序源码
  19. Unity 3D 一些对Scene窗口的调整以及摄像头的调整技巧
  20. 高级职称17计算机,(高级职称计算机考试.doc

热门文章

  1. 读取gps观测数据o文件的matlab编程,读取GPS观测数据O文件的matlab编程.doc
  2. 关于使用JAVA正则表达式报java.lang.StackOverflowError错误问题
  3. PHP文件可限速下载代码
  4. 网络创新激活西部科技,戴尔2013软件定义网络圆桌会谈的启示
  5. [转载] python字符串_一文详解Python字符串条件判断方法
  6. [转载] 消息中间件学习总结(8)——RocketMQ之RocketMQ捐赠给Apache那些鲜为人知的故事
  7. 版本向量 使用css时正确区分IE版本[转]
  8. 基本概念----Beginning Visual C#
  9. JavaScriptjQuery.检测相等和存在
  10. Centos7——NFS(Network File System)服务