内容简介:视频原文:但是鲜有人意识到了
视频原文: Set Practice: learning from Python's set types - PyCon 2019 ,PPT在这,作者为《流畅的 Python》作者 Luciano Ramalho
。
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
数据结构, set
和 mutable set
都实现了 Set
interface。
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 的交集∩。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 把 Redis 当作队列来用,真的合适吗?
- .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 We...
- Scala 中的集合(二):集合性能比较
- Scala 中的集合(二):集合性能比较
- 《面试知识,工作可待:集合篇》:Java 集合面试知识大全
- 如何对集合对象求合计,然后追加在该集合对象中
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UML用户指南
[美] Grady Booch、James Rumbaugh、Ivar Jacobson / 邵维忠、麻志毅、马浩海、刘辉 / 人民邮电出版社 / 2006-6 / 49.00元
《UML用户指南》(第2版)是UML方面最权威的一本著作,三位作者是面向对象方法最早的倡导者,是UML的创始人。本版涵盖了UML 2.0。书中为具体的UML特征提供了参考,描述了一个使用UML进行开发的过程,旨在让读者掌握UML的术语、规则和语言特点,以及如何有效地使用这种语言,知道如何应用UML去解决一些常见的建模问题。《UML用户指南》(第2版)由7个部分组成,而且每章都描述了一个特定UML特......一起来看看 《UML用户指南》 这本书的介绍吧!