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 ==/!=
    判断两个集合是否相等
  • 相关阅读:
    [转]对Lucene PhraseQuery的slop的理解
    Best jQuery Plugins of 2010
    15 jQuery Plugins To Create A User Friendly Tooltip
    Lucene:基于Java的全文检索引擎简介
    9 Powerful jQuery File Upload Plugins
    Coding Best Practices Using DateTime in the .NET Framework
    Best Image Croppers ready to use for web developers
    28 jQuery Zoom Plugins Creating Stunning Image Effect
    VS2005 + VSS2005 实现团队开发、源代码管理、版本控制(转)
    禁止状态栏显示超链
  • 原文地址:https://www.cnblogs.com/xiaohei001/p/10196324.html
Copyright © 2011-2022 走看看