美文网首页Python 成长笔记
Python拾珍:5. 集合

Python拾珍:5. 集合

作者: 赵者也 | 来源:发表于2018-02-27 14:35 被阅读6次

下面是使用字典来寻找在文档中出现但不属于一个单词列表的单词。函数接收一个字典参数 d1,其中包含文档中所有的单词作为键;以及另一个参数 d2,包含单词列表。它返回一个字典,包含 d1 中所有不在 d2 之中的键:

def substract(d1, d2):
    res = dict()
    for key in d1:
        if key not in d2:
            res[key] = None
    return res

在这些字典中,值都是 None,因为我们从来不用它们。因此,我们实际上浪费了一些存储空间。

Python 还提供了另一个内置类型,称为集合(set),它表现得和没有值而只使用键集合的字典类似。向一个集合添加元素很快,检查集合成员也很快。集合还提供方法和操作符来进行常见的集合操作。

例如,集合减法可以使用方法 difference 或者操作符 ‘-’ 来实现。因此我们可以将 substract 函数重写为:

def substract(d1, d2):
    # res = dict()
    # for key in d1:
    #     if key not in d2:
    #         res[key] = None
    # return res
    return set(d1) - set(d2)

结果是一个集合而不是字典,但是对于遍历之类的操作,表现是一样的。

实例二:

def has_duplicates(t):
    d = {}
    for x in t:
        if x in d:
            return True
        d[x] = True
    return False

一个元素第一次出现的时候,把它加入到字典中。如果相同的元素再次出现时,函数就返回 True。

使用集合,我们可以这样写同一个函数:

def has_duplicates(t):
    # d = {}
    # for x in t:
    #     if x in d:
    #         return True
    #     d[x] = True
    # return False
    return len(set(t)) < len(t)

一个元素在一个集合中只能出现一次,所以如果 t 中间的某个元素是重复的,那么变成集合之后其长度会比 t 小。如果没有重复的元素,那么集合的长度应当和 t 相同。

实例三:

def uses_only(word, available):
    for letter in word:
        if letter not in available:
            return False
    return True

uses_only 检查 word 中所有的字符是不是在 available 中出现,我们可以这样重写:

def uses_only(word, available):
    # for letter in word:
    #     if letter not in available:
    #         return False
    # return True
    return set(word) <= set(available)

操作符 <= 检查一个集合是否是另一个集合的子集,包括两个集合相等的情况。这正好符合 uses_only 函数的目标。

本文参考自《像计算机科学家一样思考Python (第2版)

相关文章

  • Python拾珍:5. 集合

    下面是使用字典来寻找在文档中出现但不属于一个单词列表的单词。函数接收一个字典参数 d1,其中包含文档中所有的单词作...

  • Python拾珍:7. defaultdict

    collections 模块还提供了 defaultdict,它和字典相似,不同的是,如果你访问一个不存在的键,它...

  • Python拾珍:2. 列表理解

    下面的函数接收一个字符串列表,将每个元素通过字符串方法 capitalize 进行映射,并返回一个新的字符串列表:...

  • Python拾珍:8. 命名元组

    很多简单的对象其实都可以看作是几个相关值的集合。例如,Point 对象,通常包含两个数字,即 x 和 y。定义一个...

  • 5.集合类

    创建数组 字面量创建 可以使用数组字面量来初始化一个数组,它是一种以数组集合来写一个或者多个值的简 写方式。数组字...

  • 5.集合类型

    Swift 语言提供数组(Array)、集合(Set)和字典(Dictionary)三种基本的集合类型用来存储集合...

  • python set集合,排序输出

    python set集合,排序输出 列表-->集合-->列表-->list sort() == 集合-->列表--...

  • 阿胶拾珍

    阿胶拾珍 谭克陶经验胸痹忌胶 退休女教师杨某,住长沙市北区,患鼻咽癌,经化疗后癌细胞已被抑制,病情稳定,因四肢皮下...

  • 天冬拾珍

    天冬拾珍 张锡纯经验 崔某向染咳嗽,百药不效,后每服松脂一钱,凉茶送服,不但咳嗽痊愈,精神比前更强。迨读《医学衷中...

  • 【书海拾珍】

    人是地球上唯一会脸红的动物。人会感到不好意,是文明的一种体现。 总有一本书会变成你自己的房间,它让你躲进去,给你庇...

网友评论

    本文标题:Python拾珍:5. 集合

    本文链接:https://www.haomeiwen.com/subject/wpzpxftx.html