你有真正把 Python Set 当作数学集合吗?

栏目: Python · 发布时间: 5年前

内容简介:视频原文:但是鲜有人意识到了

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

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

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

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

你有真正把 Python Set 当作数学集合吗?

0x00 Set 基础知识

set comprehension

你有真正把 Python Set 当作数学集合吗?
你有真正把 Python Set 当作数学集合吗?

in 查询

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

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

集合操作

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

你有真正把 Python Set 当作数学集合吗?
你有真正把 Python Set 当作数学集合吗?
你有真正把 Python Set 当作数学集合吗?

第20行是德摩根定律。

methods

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

你有真正把 Python Set 当作数学集合吗?
你有真正把 Python Set 当作数学集合吗?
你有真正把 Python Set 当作数学集合吗?

非数学相关的方法:

你有真正把 Python Set 当作数学集合吗?

ABC

collections.abc 定义了 Set 数据结构, setmutable set 都实现了 Set interface。

你有真正把 Python Set 当作数学集合吗?

0x01 Case 1

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

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

你有真正把 Python Set 当作数学集合吗?

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

你有真正把 Python Set 当作数学集合吗?

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 的交集∩。

你有真正把 Python Set 当作数学集合吗?

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

UML用户指南

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用户指南》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具