ljzsdut
GitHubToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeBack to homepage

11 集合set

集合是无序排列的可哈希的值(无序不重复的元素的序列),支持集合关系元算(并集,交集),支持成员关系(in,not in),支持迭代,因为集合是无序的,所以不支持索引、切片。

集合类型:set(),frozenset()

Set类型是可变的,可以使用诸如add()和remove())之类的方法更改内容。由于它是可变的,因此它没有哈希值,也不能用作字典键或另一个集合的元素。 Frozenset类型是不可变的且可哈希化的,创建后无法更改其内容,因此,它可以用作字典键或用作另一个集合的元素。

简单理解:不允许重复的列表,且无序。特点就是:元素不重复、无序

定义

可以使用大括号 { } 或者 set() /frozenset()函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

set(iterable) :此参数是可迭代的对象,如列表、元组等

>>> s1={11,22,33}
>>> s1
{33, 11, 22}

>>> set()  #定义一个空集合
set()
>>> set('spam')
{'m', 'a', 's', 'p'}
>>> set(['a', 'p', 's', 'm'])
{'m', 'p', 's', 'a'}

集合操作与方法

1、添加元素

  • add(x):添加一个元素:将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
s1.add(7) s1.add('jerry')
  • update(iterable):添加迭代对象(列表,元组,字典)的多个元素:
s1.update(s2)

2、移除元素

  • remove(x):移除指定的元素:如果元素不存在,报错,返回None
s1.remove('jerry')
  • discard(x):丢弃指定的元素:如果元素不存在,也不报错,返回None
s1.discard('jerry')
  • pop( ):移除指定元素,修改后并返回移除的元素。如果未指定x,则随机删除一个元素
s1.pop('jerry')
  • clear()清除所有元素:
s1.clear()

3、操作

  • len(s) 计算元素个数

  • max(s)

  • min(s)

  • x in sx not in s

  • s.copy()

4、集合运算

  • union(*others)set | other | ... 求并集

  • intersection(*others)set & other & ... 求交集

  • difference(*others)set - other - ... 求差集

  • symmetric_difference(other)set ^ other 求对称差集,返回两个集合中不重复的元素集合。即会移除两个集合中都存在的元素。相当于(s1 - s2)|(s2 - s1)

  • isdisjoint(other)与other是否不相交。 disjoint [dɪs’dʒɔɪnt] adj.不相交的;

  • issubset(other)set <= other 是否是子集; set < other 是否是真子集

  • issuperset(other)或set >= other 是否是超集; set > other 是否是真超集

集合推导/解析

类似列表推导式,同样集合支持集合推导式(Set comprehension):

>>> a = {x for x in 'abracadabra' if x not in 'abc'} 
>>> a {'r', 'd'}