集合中的方法

Posted wgbo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合中的方法相关的知识,希望对你有一定的参考价值。

  集合中的方法:利用set()创建的集合是可变集合,它的类型是不可哈希(unhashable)的。对于这句话的理解是,set()创建的集合,整体上是可变的,可以增、删;但集合中的元素(个体)是不可变(hashable)的,不能被修改,且集合中的元素不能是列表、字典等可变类型的对象。

  add()方法:向集合中增加一个元素。如果要增加的元素已存在于集合中,则什么也不做。add()方法必须传入一个明确的不可变的参数,因为集合是无序的,所以元素会被加到集合的任意位置。

>>> a = set([1, 2, q])
>>> a
{1, 2, q}
>>> a.add(6)    # 增加一个整数
>>> a
{1, 2, 6, q}
>>> a.add(www)    # 增加一个整数
>>> a
{1, 2, www, 6, q}
>>> a.add((s, 7))    # 增加一个整数
>>> a
{1, 2, www, 6, q, (s, 7)}
>>> a.add({1, 0, r})    # 增加的元素必须是hashable的
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: set
>>> a.add([2, 7])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: list
>>> a.add({A:99})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: dict

  update()方法:合并集合或其他不可变的对象到另一个集合中,以更新该集合。

>>> set1 = {1, 3, a}
>>> set2 = {b, A}
>>> set1.update(set2)    # 合并集合
>>> set1    # set1被修改
{a, 1, 3, A, b}
>>> set2    # set2不变
{A, b}
>>> set2.update(Java)    # 还可合并其他不可变类型的对象,如字符串
>>> set2
{a, J, A, v, b}
>>> set2.update((g, 9))    # 如元组
>>> set2
{A, 9, v, a, g, J, b}

  pop()方法:删除集合中的一个元素。此方法没有参数,是随机删除集合中的一个元素,并将此元素返回。当集合为空时,若继续删除,则报错。

>>> set1 = {3, A}
>>> set1.pop()    # 不传参数,随机删除一个元素,并返回
3
>>> set1.pop()
A
>>> set1.pop()    # 集合为空时,报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: pop from an empty set

  remove方法:删除集合中的一个指定的元素。此方法必须提供一个参数,该参数即为要删除的元素,不返回任何值,只是在原地修改集合。若指定的要删除的元素不存在于集合中,则报错。

>>> set1 = {3, A}
>>> set1.remove(A)    # 删除指定元素,没有任何返回值
>>> set1    # 原地修改集合
{3}
>>> set1.remove(6)    # 若要删除的元素不存在,报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 6

  discard()方法:作用与用法同remove()方法,区别在于若要删除的对象不存在于集合中,则什么也不做。

>>> set1 = {3, A}
>>> set1.discard(A)    # 删除指定元素,没有任何返回值
>>> set1    # 原地修改集合
{3}
>>> set1.discard(B)    # 若要删除的元素不存在,则什么也不做

  clear()方法:清空集合。清空集合中的所有元素,清空后的集合对象依然存在,只是变成一个空集合。

>>> set1 = {3, A}
>>> set1.clear()    # 清空集合,不返回任何值
>>> set1    # 清空后的集合对象依然存在,只是变成一个空集合
set()

  del:删除集合。集合对象将完全被删除,集合对象将不存在于内存中了。

>>> set1 = {3, A}
>>> del set1    # 完全删除集合对象
>>> set1    # 被删除的集合对象不再存在
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name set1 is not defined

  不变的集合:以set()创建的集合都是可变几何,集合对象可以被原地修改,即集合对象时不可哈希(unhashable)的。以frozenset()创建的集合则是不可变的,集合对象不能实现增加或删除,即可哈希(hashable)的。此时,set中的增加或删除元素的方法在frozenset中都没有。

>>> f_set = frozenset(python)
>>> f_set
frozenset({t, h, y, n, p, o})
>>> f_set.add(3)    # 不能增加元素
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: frozenset object has no attribute add

集合运算

         元素与集合的关系:元素与集合只有一种关系,元素要么属于某个集合,要么不属于。

>>> set1 = set(python)
>>> set1
{t, h, y, n, p, o}
>>> t in set1    # 元素属于集合
True
>>> m not in set1    # 元素不属于集合
True

  集合与集合的关系:假设有两个集合A和B。

                  A是否等于B,即两个集合的元素是否完全一样。

>>> A = set(python)
>>> B = set(python)
>>> A == B    # 判断A和B是否相等
True
>>> A != B
False

    A是否是B的子集,或B是否是A的超集。

>>> A = set(python)
>>> A
{t, h, y, n, p, o}
>>> B = set(python23)
>>> B
{2, t, h, y, 3, n, p, o}
>>> A < B    # 判断A是否是B的子集
True
>>> A.issubset(B)    # 判断A是否是B的子集
True
>>> B > A    # 判断B是否是A的超集
True
>>> B.issuperset(A)    # 判断B是否是A的超集
True

    A和B的并集。这个结果是生成一个新的对象,原有的集合没有改变。

>>> A = set(pyt)
>>> B = set(hon2)
>>> A | B    # A和B的并集
{2, t, h, n, y, p, o}
>>> A.union(B)    # A和B的并集
{2, t, h, n, y, p, o}
>>> A    # 原有的集合没有改变
{t, y, p}
>>> B
{2, h, n, o}

    A和B的交集。这个结果是生成一个新的对象,原有的集合没有改变。

>>> A = {1, e, f, d}
>>> B = {1, w, f}
>>> A & B    # A和B的交集
{1, f}
>>> A.intersection(B)    # A和B的交集
{1, f}
>>> A    # 原有的集合没有改变
{1, e, d, f}
>>> B
{1, w, f}

    A相对于B的差(补)。即A相对于B的不同的部分元素。也是生成一个新的对象,原有的集合没有改变。

>>> A = {1, e, f, d}
>>> B = {1, w, f}
>>> A – B    # A相对于B的差(补)集
{e, d}
>>> A.difference(B)    # A相对于B的差(补)集
{e, d}
>>> A    # 原有的集合没有改变
{1, e, d, f}
>>> B
{1, w, f}

AB的对称差集。A相对于B的不同的部分元素和B相对于A的不同的部分元素的并集。

>>> A = {1, e, f, d}
>>> B = {1, w, f}
>>> A – B    # A相对于B的不同的部分元素
{e, d}
>>> B – A    # B相对于A的不同的部分元素
{w}
>>> A.symmetric_difference(B)    # A和B的对称差集
{e, w, d}

  

 

 

 

>= {1, ‘e‘, ‘f‘, ‘d‘}

>>> B = {1, ‘w‘, ‘f‘}

>>> A – B    # A相对于B的差()

{‘e‘, ‘d‘}

>>> A.difference(B)    # A相对于B的差()

{‘e‘, ‘d‘}

>>> A    # 原有的集合没有改变

{1, ‘e‘, ‘d‘, ‘f‘}

>>> B

{1, ‘w‘, ‘f‘}

 

以上是关于集合中的方法的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 - Golang 实现集合操作

laravel特殊功能代码片段集合

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]

如何从一个片段中删除数据,这些片段应该反映在google firebase中的其他片段中

如何将 View 类中的代码片段移动到 OnAppearing() 方法?

如何使用 jquery 从 asp.net 视图模型中动态删除行而不删除集合中的其余下一个对象