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

     

  • 相关阅读:
    C#利用反射动态调用类及方法
    系统程序监控软件
    SQL server 2008 安装和远程访问的问题
    sql server 创建临时表
    IIS 时间问题
    windows 2008 安装 sql server 2008
    sql server xml nodes 的使用
    Window 7sp1 安装vs2010 sp1 打开xaml文件崩溃
    CSS资源网址
    Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0
  • 原文地址:https://www.cnblogs.com/chenshoubiao/p/4773683.html
Copyright © 2011-2022 走看看