zoukankan      html  css  js  c++  java
  • python-集合(第二篇(七):集合)

    第二篇(七):集合

     

    python 集合 集合标准操作

    摘要: 说明: ·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现: ·sets支持x in set, len(set)和 for x in set; ·作为一个无序的集合,sets 不记录元素位置或者插入点,因此,sets不支持indexing, slicing,或...

    说明:

    ·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现:

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

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

    ·学习集合,主要是学习集合的一系列标准操作:集合创建、集合添加、集合删除、交并差集等;


    1.创建集合:set()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> a = range(10)
    >>> a
    [0123456789]
    >>> a.insert(3,8)
    >>> a.insert(3,6)
    >>> a
    [012683456789]
    >>> set(a)
    set([0123456789])
    >>> set('boy')
    set(['y''b''o'])

    2.集合添加:add()与update

    --add()

    ·功能:把要添加的元素作为一个整体添加到集合中;

    ·演示如下:

    1
    2
    3
    4
    5
    6
    >>> a = set('boy')
    >>> a
    set(['y''b''o'])
    >>> a.add('xpleaf')
    >>> a
    set(['y''b''xpleaf''o'])

    ·add()的参数不能为列表和字典,但是可以为元组:

    1
    2
    3
    4
    5
    6
    >>> b = set('Hello')
    >>> b
    set(['H''e''l''o'])
    >>> b.add(('xpleaf','CL'))
    >>> b
    set(['H', ('xpleaf''CL'), 'e''l''o'])

    --update()

    ·功能:把要添加的元素拆分(如果不是单个字符),再一个一个地添加到集合中;

    ·演示如下:

    1
    2
    3
    4
    5
    6
    7
    8
    >>> a
    set(['y''b''xpleaf''o'])
    >>> a.update('Python')
    >>> a
    set(['b''h''xpleaf''n''P''o''y''t'])
    >>> a.update([1,2,3])
    >>> a
    set([12'b''h''xpleaf''n''P'3'o''y''t'])

    ·前面讲集合是不支持indexing的,所以这里看到新添加的元素在集合中是无序排列的;


    3.集合删除:remove(),discard()与pop()

    --remove()

    ·功能:从set中删除元素,如果不存在则引发KeyError;

    ·演示如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> a
    set([12'b''h''xpleaf''n''P'3'o''y''t'])
    >>> a.remove('b')
    >>> a
    set([12'h''xpleaf''n''P'3'o''y''t'])
    >>> a.remove('KeyError')
    Traceback (most recent call last):
      File "<stdin>", line 1in <module>
    KeyError: 'KeyError'

    --discard()

    ·功能:如果在set中存在该元素,则删除,无论存在与否,都没有提示;

    ·演示如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> a
    set([123'h''xpleaf''n''P''o''y''t'])
    >>> import tab
    >>> a.discard('xpleaf')
    >>> a
    set([123'h''n''P''o''y''t'])
    >>> a.discard('CL')
    >>> a
    set([123'h''n''P''o''y''t'])

    --pop()

    ·功能:删除并返回set中一个不确定的元素;

    ·演示如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> a.pop()
    1
    >>> a
    set([23'h''n''P''o''y''t'])
    >>> a.pop()
    2
    >>> a.pop()
    3
    >>> a
    set(['h''n''P''o''y''t'])

    4.集合数学操作

    ·进行数学操作需要了解一些集合操作符号和数学符号:

    数学符号 Python符号 含义
    -或 - 差集,相对补集
    & 交集
    | 并集
    取∩的补 ^ 对称差集
    !=

    不等于

    = == 等于
    in 属于
      not in 不属于

    --差集,相对补集:-

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> a = set(range(10))
    >>> b = set(range(15))
    >>> a
    set([0123456789])
    >>> b
    set([01234567891011121314])
    >>> b - a
    set([1011121314])
    >>> a - b
    set([])

    --交集:&

    1
    2
    >>> a & b
    set([0123456789])

    ·也可以用intersection()函数实现:

    1
    2
    >>> a.intersection(b)
    set([0123456789])

    --并集:|

    1
    2
    >>> a | b
    set([01234567891011121314])

    ·也可以用union()函数实现:

    1
    2
    >>> a.union(b)
    set([01234567891011121314])

    --对称差集:^

    1
    2
    3
    4
    5
    set([0123456789])
    >>> b
    set([01234567891011121314])
    >>> a ^ b
    set([1011121314])

    ·也可以用symmetric_difference()函数实现:

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

    --等于与不等于:==与!=

    1
    2
    3
    4
    >>> a == b
    False
    >>> a != b
    True

    --属于与不属于:in与not in

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> a
    set([0123456789])
    >>> b
    set([01234567891011121314])
    >>> a in b
    False
    >>> b in a
    False
    >>> a not in b
    True
    >>> 0 in a
    True

    ·指的是元素是否属于集合,而不是集合之间的包含;

    ·集合之间的包含(子集)可用:>、>=、<、<=等表示

    1
    2
    3
    4
    >>> a >= b
    False
    >>> a <= b
    True

    ·<=相当于函数issubset():

    1
    2
    3
    4
    >>> a <= b
    True
    >>> a.issubset(b)    ===>a是b的子集
    True

    ·>=相当于函数issuperset():

    1
    2
    3
    4
    5
    6
    >>> a >= b
    False
    >>> a.issuperset(b)    ===>a不是b的超集,即a不包含b
    False
    >>> b.issuperset(a)    ===>b是a的超集,即b包含a
    True

    5.其它操作

    --len()

    ·功能:测定集合的长度;

    ·演示如下:

    1
    2
    3
    4
    >>> len(a)
    10
    >>> len(b)
    15

    --copy()

    ·功能:浅复制;

    ·前面已有提及,不再重复;

    --hash()

    ·功能:返回参数的哈希值;

    ·演示如下:

    1
    2
    3
    4
    5
    6
    7
    8
    >>> a
    set([0123456789])
    >>> b
    set([01234567891011121314])
    >>> hash(a)
    Traceback (most recent call last):
      File "<stdin>", line 1in <module>
    TypeError: unhashable type: 'set'

    ·可以看到普通hash()函数的参数不能为set类型(列表也不行),但可以为字符串类型:

    1
    2
    >>> hash('CL')
    8576051523077447

    ·只要数据量足够大,hash是有可能产生相同的hash值,更安全的为md5类型的hash值计算:

    1
    2
    3
    4
    5
    >>> import hashlib
    >>> a = 'hello'
    >>> a = hashlib.md5()
    >>> a.hexdigest()
    'd41d8cd98f00b204e9800998ecf8427e'

    ·可以看到产生的hash值中还包含有字母等字符,因此破解的难度会更大。

  • 相关阅读:
    java实现向有序数组中插入一个元素
    java实现向有序数组中插入一个元素
    java实现向有序数组中插入一个元素
    java实现字符逆序输出
    java实现字符逆序输出
    java实现字符逆序输出
    将博客搬至CSDN
    sql server链接查询
    sql server模糊查询、分组
    sql server简单查询
  • 原文地址:https://www.cnblogs.com/weiman3389/p/6043060.html
Copyright © 2011-2022 走看看