zoukankan      html  css  js  c++  java
  • 集合类型

    集合(Set)

    集合(set)是一个无序不重复元素的序列。

    基本功能是进行成员关系测试和删除重复元素。

    可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

    集合使用

    parame = {value01,value02,...}
    或者
    set(value)

    集合数据类型的核心在于自动去重。很多时候,这能给你省不少事。

    >>> s = set([1,1,2,3,3,4])
    >>> s
    {1, 2, 3, 4}        # 自动去重
    >>> set("it is a nice day")     # 对于字符串,集合会把它一个一个拆开,然后去重
    {'s', 'e', 'y', 't', 'c', 'n', ' ', 'd', 'i', 'a'}

    通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

    >>> s = {1, 2, 3, 4}
    >>> s
    {1, 2, 3, 4}
    >>> s.add(5)
    >>> s
    {1, 2, 3, 4, 5}
    >>> s.add(5)
    >>> s
    {1, 2, 3, 4, 5}

    可以通过update()方法,将另一个对象更新到已有的集合中,这一过程同样会进行去重。

    >>> s
    {1, 2, 3, 4, 5}
    >>> s.update("hello")
    >>> s
    {1, 2, 3, 4, 5, 'e', 'o', 'l', 'h'}

    通过remove(key)方法删除指定元素,或者使用pop()方法。注意,集合的pop方法无法设置参数,删除指定的元素:

    >>> s
    {1, 2, 3, 4, 5, 'e', 'o', 'l', 'h'}
    >>> s.remove("l")
    >>> s
    {1, 2, 3, 4, 5, 'e', 'o', 'h'}
    >>> s.pop()
    1
    >>> s
    {2, 3, 4, 5, 'e', 'o', 'h'}
    >>> s.pop(3)
    Traceback (most recent call last):
      File "<pyshell#22>", line 1, in <module>
        s.pop(3)
    TypeError: pop() takes no arguments (1 given)

    除了add、clear、copy、pop、remove、update等集合常规操作,剩下的全是数学意义上的集合操作,交并差等等。

    对集合进行交并差等,既可以使用union一类的英文方法名,也可以更方便的使用减号表示差集,“&”表示交集,“|”表示并集。看看下面的例子:

    >>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
    >>> print(basket)                      # 删除重复的
    {'orange', 'banana', 'pear', 'apple'}
    >>> 'orange' in basket                 # 检测成员
    True
    >>> 'crabgrass' in basket
    False
    >>> # 以下演示了两个集合的交、并、差操作
    >>> a = set('abracadabra')
    >>> b = set('alacazam')
    >>> a                                  # a 中唯一的字母
    {'a', 'r', 'b', 'c', 'd'}
    >>> a - b                              # 在 a 中的字母,但不在 b 中
    {'r', 'd', 'b'}
    >>> a | b                              # 在 a 或 b 中的字母
    {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
    >>> a & b                              # 在 a 和 b 中都有的字母
    {'a', 'c'}
    >>> a ^ b                              # 在 a 或 b 中的字母,但不同时在 a 和 b 中
    {'r', 'd', 'b', 'm', 'z', 'l'}

    集合数据类型属于Python内置的数据类型,但不被重视,在很多书籍中甚至都看不到一点介绍。其实,集合是一种非常有用的数据结构,它的去重和集合运算是其它内置类型都不具备的功能,在很多场合有着非常重要的作用,比如网络爬虫。

    我们都知道爬虫需要发散链接,一个页面连着另一个页面,不断爬取所有的超级链接,才能把整个站点爬取下来。然而在成千上万个页面链接中,有很大一部分可能是重复的链接或者循环互链,如果不对链接进行去重处理,那么爬虫要么陷入死循环内,要么就是出现错误。这个时候可以用集合的去重功能,保留一个曾经爬过页面的不重复的元素集合,每爬一个新链接,看看集合里是否曾经爬过,没有就开始爬,并将链接加入集合,爬过就忽略当前链接。在这里,用集合远比用列表或者字典要来得高效、节省得多。

    集合方法

    序号方法及描述
    1 add(obj)
    在集合中添加一个元素,如果元素已经存在,不会抛出异常
    2 clear() 
    删除集合中的所有元素(清空集合)
    3 copy() 
    复制(浅拷贝)集合
    4 difference(s2)
    返回两个或多个集合的差值作为一个新集合(差集),同 s1 - s2
    5 difference_update(s2)
    从该集合中删除其他集合的所有元素(把差集赋值给该集合)
    6 discard()
    与remove()功能相同,从集合中删除一个元素,如果元素不在集合中不会抛出异常
    7 intersection(s2)
    返回两个集合的交集作为一个新集合(交集),同 s1 & s2
    8 intersection_update(s2)
    更新该集合,从自己与另一个集合的交集(把交集赋值给该集合)
    9 isdisjoint(s2)
    判断两个集合是否不相交,不相交时返回True
    10 issubset(s2)
    判断该集合是否是其他集合的子集,如果是返回True 同 <=
    11  issuperset(s2)
    判断该集合是否包含其他集合,如果包含返回True 同 >=
    12  pop()
    删除并返回一个集合中的一个随机元素,当集合为空时会抛出异常
    13  remove()
    与discard()功能相同,从集合中删除一个元素,如果元素不在集合中会抛出异常
    14  symmetric_difference(s2)
    返回两个集合的对称差作为一个新的集合(对称差集),同 s1 ^ s2
    15 symmetric_difference_update(s2)
    更新该集合,从自己与另一个集合的对称差集(把对称差集赋值给该集合)
    16 union(s2)
    返回所有集合的并值作为一个新集合(并集),同 s1 | s2
    17 update(iterable)
    在集合中添加元素,通过一个可迭代对象
    18 in/not in
    判断某个元素是否在集合中
    19 ==/!=
    判断两个集合是否相等
  • 相关阅读:
    使用scp进行远程数据传输时避免输入密码(scp without password)
    scons用户指南翻译(附gcc/g++参数详解)
    StringIO 模块用于在内存缓冲区中读写数据
    注意变换的顺序
    为什么static成员必须在类外初始化
    Visual Studio中删除所有空行
    rendering order of skybox
    解决VS中注释乱码的问题
    一道数论题目
    First Chance Exception
  • 原文地址:https://www.cnblogs.com/xiaohei001/p/10196324.html
Copyright © 2011-2022 走看看