• Python 极简教程(十)集合 set


    什么是集合?

    集合(set)是一种可变无序不重复的序列。

    集合是python的序列之一,集合没有列表(list)、元组(tuple)和字典(ditc)常见。但是有时候也有奇效。
    我们先来看个集合的例子:

    >>> s = {'b', 'x', 'a'}
    >>> type(s)
    # <class 'set'>
    

    s = {'b', 'x', 'a'}就是一个集合(set),数据类型就是set。

    我们可以仔细观察一下集合(set)的形态:

    • 以逗号分隔元素,类似列表(list)和元组(tuple);
    • 以大括号{}进行约束并且其无序的特性,类似字典(dict);
    • 无序的特性,类似字典(dict);
    • 不重复,类似字典中的键。

    可以简单的理解为就是没有值(value)的字典(dict)。
    当然这是我说的,不够准确,被人骂了不要来找我!

    接下来我们来看下集合的基本操作。

    集合的创建

    我们看如何创建集合:

    1. 创建一个空的集合;
      空集合的创建不能用以下这种形式
    >>> s = {}                # 这是一个空字典,不是空集合
    >>> type(s)
    # <class 'dict'>
    

    那要如何创建一个空的集合呢?

    >>> s = set()               # 这是一个空字典,不是空集合
    >>> s
    # set()
    >>> type(s)
    # <class 'set'>
    

    我们可以看到要创建一个空集合,要使用s = set()这种方式。

    1. 创建非空的集合;

    set()可以将任意一种序列变成集合

    # 列表
    >>> li = ['a', 'b', 'c']
    >>> set(li)
    # {'b', 'c', 'a'}
    
    # 元组
    >>> t = (1,2,3)
    >>> set(t)
    # {1, 2, 3}
    
    # 字典
    >>> d = {'x':1,'y':2}
    >>> set(d)
    # {'y', 'x'}
    
    # 字符串
    >>> set('python')
    # {'y', 'p', 'n', 'h', 't', 'o'}
    
    1. 利用集合的不重复状态,进行序列的去重
    # 有重复元素的列表
    >>> li = ['a', 'b', 'c', 'a', 'c']
    >>> s = set(li)
    # {'b', 'c', 'a'}
    
    # 如果想去重后依然是列表,转换一下
    >>> li = list(set(li))
    >>> li.sort()
    >>> li
    # ['a', 'b', 'c']
    

    集合元素的添加、删除

    1. 集合元素的添加有两种常用方法,分别是add和update

    add方法类似于列表(list)中的append方法,在末尾添加元素

    >>> s = {'b', 'c', 'a'}
    >>> s.add('abc')     #这里会把'abc'当成一个字符串
    >>> s
    # {'b', 'c', 'abc', 'a'}
    

    集合中的元素不能是列表(list)、字典(dict)

    >>>s = {'b', 'c', 'a'}
    >>> s.add([1,2])      
    TypeError: unhashable type: 'list'
    
    >>> s.add({'x':1,'y':2})
    TypeError: unhashable type: 'dict'
    

    update方法类似于列表相加,其中update的参数为序列。也就是把序列中的所有元素全部无序并排重后加入到集合中。

    >>> s = {'b', 'c', 'a'}
    >>> s.update('xyz')      #这里会把'xyz'当成序列来处理,'x','y','z'分别是三个元素
    >>> s
    # {'y', 'c', 'z', 'b', 'x', 'a'}
    
    1. 集合元素的删除方法

    集合删除操作方法有两种:
    s.remove('e'):删除匹配的元素
    s.pop():删除第一个元素,无法指定index,因为集合没有index

    # remove
    >>> s = {'b', 'c', 'a'}
    >>> s.remove('a')
    >>> s
    # {'b', 'c'}
    
    # pop
    >>> s = {'b', 'c', 'a'}
    >>> s.pop()
    # 'b'
    >>> s
    # {'c', 'a'}
    

    集合的交集、合集(并集)、差集

    通过集合的交集、合集(并集)、差集可以很方便的处理一些列表(list)

    1. 交集:

    交集,符号“&”,表示两个集合中相同的元素部分组成新的集合

    # 交集 &
    >>> a = set(['a', 'b', 'c'])
    >>> b = set(['b','d','e'])
    >>> a & b 
    # {'b'}
    
    1. 合集(并集)

    合集(并集),符号“|”,表示两个集合组合成一个不重复的新集合(也就是重复部分会进行排重)

    # 合集(并集) |
    >>> a = set(['a', 'b', 'c'])
    >>> b = set(['b','d','e'])
    >>> a | b  
    # {'e', 'd', 'c', 'b', 'a'}
    
    1. 差集、相对补集

    差集、相对补集, 符号“-”,如果 a - b 表示a集合中没有在b集合中存在的元素,反之 b - a 表示b集合中没有在a集合中存在的元素。可以用于取两个集合中不相同的元素。

    # 合集(并集) |
    >>> a = set(['a', 'b', 'c'])
    >>> b = set(['b','d','e'])
    >>> a - b  
    # {'c', 'a'}
    >>> b - a
    # {'e', 'd'}
    
    1. 其他

    除开上面集中集合外,还有类似与列表(list)中的一些操作,如in,not in,!=,==等

    # 不等于 !=
    >>> a != b
    # True
    
    # 等于 ==
    >>> a == b
    # False
    
    # 包含 in
    >>> a in b
    # False
    
    # 不包含 not in
    >>> a not in b
    # True
    

    通过集合,我们可以方便快速的处理各种序列中的一些特殊操作。

    1. 排重,如果序列中存在重合的元素,可以通过集合方便的去重;
    2. 取两个序列中相同的元素,通过将序列转换为集合后,取交集即可;
    3. 将两个序列合并,并且元素不重复,通过合集即可;
    4. 取两个序列中不相同的部分,用差集即可。

    本节练习:

    1. 将列表 [5, 6, 7, 4, 5, 7] 中重复的元素去掉
    2. 求列表[2, 3, 5, 7, 9]和[2, 4, 5, 9, 8] 中的相同元素和不同元素
  • 相关阅读:
    2018/03/27 每日一个Linux命令 之 cron
    2018/03/26 每日一个Linux命令 之 du
    《Nginx
    学习计划 mysql explain执行计划任务详解
    方法覆盖
    二维数组中的查找
    oracle导入少量数据(少于10M)
    hive计算日期差
    查看文件编码格式以及更改编码
    java io流
  • 原文地址:https://www.cnblogs.com/zmll/p/10611232.html
Copyright © 2020-2023  润新知