zoukankan      html  css  js  c++  java
  • python基础-集合小结

    集合

    简介

    python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素.

    sets 支持 x in set, len(set), 和 for x in set。

    集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.

    作为一个无序的集合,sets 不记录元素位置或者插入点。因此,sets 不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。

    set为可变集合

    frozenset为固定集合

    可变集合特有的方法: add, remove, discard, pop, clear, 这些接受对象的方法, 参数必须是可哈希的

    声明

    用集合的工厂方法 set()和 frozenset():

    set

    >>> s = set('cheeseshop')
    >>> s
    set(['c', 'e', 'h', 'o', 'p', 's'])
    

    frozenset

    >>> b = frozenset([1,2,3,2])
    >>> b
    frozenset([1, 2, 3])
    >>> b.add(4)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'frozenset' object has no attribute 'add'
    

    Set 和 ImmutableSet

    字符串->字符集

    >>> set('hello')
    set(['h', 'e', 'l', 'o'])
    

    列表/元组->集合

    >>> set([1,2,3,2,1])
    set([1, 2, 3])
    >>> set((1,2,3,2,1))
    set([1, 2, 3])
    

    甚至是 字典->集合

    >>> a = {'name':'tom','age':22,'score':22}
    >>> set(a)
    set(['age', 'score', 'name'])
    

    常用操作

    成员关系

    >>> h = set('hello')
    >>> h
    set(['h', 'e', 'l', 'o'])
    >>> 'l' in h
    True
    >>> 'l' not in h
    False
    

    新增删除

    新增单个元素 s.add(x)

    向 set “s”中增加元素 x

    >>> a = set([1,2,3,4,2])
    >>> a
    set([1, 2, 3, 4])
    >>> a.add(2)
    >>> a
    set([1, 2, 3, 4])
    >>> a.add(5)
    >>> a
    set([1, 2, 3, 4, 5])
    

    新增多个元素

    s.update(t)

    s |= t

    >>> a = set([1,2,3])
    >>> b = set([2,3,4])
    >>> a.update(b)
    >>> a
    set([1, 2, 3, 4])
    >>> b
    set([2, 3, 4])
    

    删除

    s.remove(x)

    从 set “s”中删除元素 x, 如果不存在则引发 KeyError

    >>> a
    set([1, 2, 3, 4, 5])
    >>> a.remove(4)
    >>> a
    set([1, 2, 3, 5])
    >>> a.remove(4)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 4
    

    s.discard(x)

    如果在 set “s”中存在元素 x, 则删除

    >>> a
    set([1, 2, 3, 5])
    >>> a.discard(3)
    >>> a
    set([1, 2, 5])
    >>> a.discard(3)
    >>> a
    set([1, 2, 5])
    

    s.pop()

    删除并且返回 set “s”中的一个不确定的元素, 如果为空则引发 KeyError

    >>> a
    set([1, 5])
    >>> a.pop()
    1
    >>> a.pop()
    5
    >>> a.pop()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'pop from an empty set'
    

    s.clear()

    删除 set “s”中的所有元素

    >>> a
    set([1, 2, 3, 4])
    >>> a.clear()
    >>> a
    set([])
    
    >>> b = set([1,2,3])
    >>> del b
    

    集合间操作

    注意,集合操作可以通过函数进行,也存在等价的运算符

    1.交集

    s.union(t) 等价 s | t

    返回一个新的 set 包含 s 和 t 中的每一个元素

    2.并集

    s.intersection(t) 等价 s & t

    返回一个新的 set 包含 s 和 t 中的公共元素

    3.差集

    s.difference(t) 等价 s - t

    返回一个新的 set 包含 s 中有但是 t 中没有的元素

    4.差分集

    s.symmetric_difference(t) 等价 s ^ t

    返回一个新的 set 包含 s 和 t 中不重复的元素

    >>> a = set([1,2,3])
    >>> b = set([2,3,4])
    >>> a.symmetric_difference(b)
    set([1, 4])
    

    5.关系判断

    s.issubset(t) 等价 s <= t

    测试是否 s 中的每一个元素都在 t 中

    s.issuperset(t) 等价 s >= t

    测试是否 t 中的每一个元素都在 s 中

    6.浅拷贝

    >>> a
    set([1, 2, 3])
    >>> b = a.copy()
    >>> b
    set([1, 2, 3])
    

    其他

    1.用的较少的函数

    s.intersection_update(t) 等价 s &= t

    返回只保留含有 set “t”中元素的 set “s”

    s.difference_update(t) 等价 s -= t

    返回删除了 set “t”中含有的元素后的 set “s”

    s.symmetric_difference_update(t) 等价 s ^= t

    返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s”

    补充

    集合推导(2013-08-13)

    >>> { x for x in range(10) }
    set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    

    http://wklken.me/posts/2013/03/10/python-base-set.html#_5

     

  • 相关阅读:
    POJ 1981 最大点覆盖问题(极角排序)
    POJ 1286 Pólya定理
    POJ 1830 高斯消元
    HDU 3364 高斯消元
    Educational Codeforces Round 42D. Merge Equals(STL)
    ZOJ 3955:Saddle Point(思维)
    POJ 3301:Texas Trip(计算几何+三分)
    SCUT 125 :笔芯回文(DP)
    ZOJ 3953:Intervals(优先队列+思维)
    Codeforces Gym101097I:Sticks (思维)
  • 原文地址:https://www.cnblogs.com/chenshoubiao/p/4773683.html
Copyright © 2011-2022 走看看