zoukankan      html  css  js  c++  java
  • 课时27:集合:在我的世界里,你就是唯一

    目录:

      一、字典的表亲:集合

      二、创建集合

      三、访问集合

      四、不可变集合

      五、课时27课后习题及答案

    **************************

    一、字典的表亲:集合

    **************************

    Python的字典是对数学中映射概念支持的直接体现。字典有个表亲:集合。哦?它们长得很像?

    >>> num1 = {}
    >>> type(num1)
    <class 'dict'>
    >>> num2 = {1,2,3,4,5}
    >>> type(num2)
    <class 'set'>

    在Python里,如果用大括号括起一堆数字但没有体现映射关系,那么Python就会认为这堆玩意就是个集合。

    集合的作用:唯一。举个例子:

    >>> num = {1,2,3,4,5,4,3,2,1}
    >>> num
    {1, 2, 3, 4, 5}

    大家看到,我们根本就不需要做什么,集合就会帮我们把重复的数据清理掉,这样是不是很方便呢?但要注意的是,集合是无序的,也就是你不能试图去索引集合中的某一个元素:

    >>> num[2]
    Traceback (most recent call last):
      File "<pyshell#6>", line 1, in <module>
        num[2]
    TypeError: 'set' object does not support indexing

    ***************

    二、创建集合

    ***************

    创建集合有两种方法:一种是直接把一堆元素用大括号{ }括起来;另一种是用set()。

    >>> set1 = {"小甲鱼","小鱿鱼","小护士","小甲鱼"}
    >>> set2 = set(["小甲鱼","小鱿鱼","小护士","小甲鱼"])
    >>> set1 == set2
    True
    >>> set1
    {'小鱿鱼', '小护士', '小甲鱼'}
    >>> set2
    {'小鱿鱼', '小护士', '小甲鱼'}

    现在要求去除列表[1,2,3,4,5,5,3,1,0]中重复的元素。没学过集合时,可以这样写:

    >>> list1 = [1,2,3,4,5,5,3,1,0]
    >>> temp = list1[:]
    >>> list1.clear()
    >>> for each in temp:
        if each not in list1:
            list1.append(each)
    
            
    >>> list1
    [1, 2, 3, 4, 5, 0]

    学习了集合后,可以这样干:

    >>> list1 = [1,2,3,4,5,5,3,1,0]
    >>> list1 = list(set(list1))
    >>> list1
    [0, 1, 2, 3, 4, 5]

    看!知识才是第一生产力。在这里,由于set()创造了的集合内部是无序的,所以再调用list()将无序的集合转换成列表就不能保证原来的列表的顺序了(这里Python好心办坏事,把0放在最前边去了。)所以如果关注列表中元素的前后顺序问题,使用set()这个函数时就要提高警惕啦!

    ***************

    三、访问集合

    ***************

    由于集合中的元素是无序的,所以并不能像序列那样用下标来进行访问,但是可以使用迭代把集合中的数据一个个读取出来:

    >>> set1 = {1,2,3,4,5,4,3,2,1,0}
    >>> for each in set1:
        print(each,end= ' ')
    
        
    0 1 2 3 4 5 

    当然也可以使用in或者not in判断一个元素是否在集合中已经存在:

    >>> 0 in set1
    True
    >>> "oo" in set1
    False
    >>> "xx" not in set1
    True

    使用add()方法可以为集合添加元素,使用remove()方法可以删除集合中已知的元素:

    >>> set1
    {0, 1, 2, 3, 4, 5}
    >>> set1.add(6)
    >>> set1
    {0, 1, 2, 3, 4, 5, 6}
    >>> set1.remove(5)
    >>> set1
    {0, 1, 2, 3, 4, 6}

    ******************

    四、不可变集合

    ******************

    有些时候,我们希望集合中的元素具有稳定性,也就是说,像元组一样不能随意的增加或者删除集合中的元素。那么我们可以定义不可变集合,这里使用的是frozenset()函数,没错,就是把元素frozen(冰冻)起来:

    >>> set1 = frozenset({1,2,3,4,5})
    >>> set1
    frozenset({1, 2, 3, 4, 5})
    >>> set1.add(6)
    Traceback (most recent call last):
      File "<pyshell#54>", line 1, in <module>
        set1.add(6)
    AttributeError: 'frozenset' object has no attribute 'add'

    *******************************

    五、课时27课后习题及答案

    *******************************

    爱笑的男孩运气都不会差
  • 相关阅读:
    NopCommerce仓储模型解析
    NopCommerce事件发布订阅机制详解
    Mongodb学习笔记
    ES安装和运行
    Redis缓存使用方法
    Solr环境搭建
    Redis--redis集群环境搭建
    Redis--环境搭建
    Spring-----AOP深度理解
    Shell脚本编写2------有关变量
  • 原文地址:https://www.cnblogs.com/DC0307/p/9488305.html
Copyright © 2011-2022 走看看