Python初学小知识(八):集合

  • 十二、集合
  • 1. 集合与列表
  • 2. 创建集合
  • 3. 集合的增删查
  • 3.1 增
  • 3.1.1 add()添加一个
  • 3.1.2 update()批量添加
  • 3.2 删
  • 3.2.1 删除一个元素remove()
  • 3.2.2 不会报错的删除方法discard()
  • 3.2.3 清除所有元素的方法clear()
  • 3.3 查
  • 3.3.1 读取set元素
  • 3.3.2 集合的子集和超集
  • 3.3.3 判断集合是否重合



C语言和Python经常弄混,尤其总是忍不住给Python后面加分号……干脆给自己做个笔记省的忘了。。。(在慕课网学习的)

十二、集合

在前面,我们学习了dict,知道dict的key是不重复的,当我们往dict里添加一个相同key的value时,新的value将会覆盖旧的value。
有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。

1. 集合与列表

set和list类似,拥有一系列元素,但是set和list不一样,set里面的元素是不允许重复的,而list里面可以包含相同的元素;set与list的另一个区别是,set里面的元素是没有顺序的。

2. 创建集合

创建set的方式是使用set(),并传入一个list,list的元素将会被转换成set的元素。

>>> s = set([1, 4, 3, 2, 5])
>>> s
{1, 2, 3, 4, 5}  
#打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的。

另外,set不能包含重复的元素:

>>> s = set([1, 4, 3, 2, 5, 4, 2, 3, 1])
>>> s
{1, 2, 3, 4, 5}

3. 集合的增删查

3.1 增

3.1.1 add()添加一个
>>> s = set(['Alice', 'Bob', 'Candy', 'David', 'Ellena'])
>>> s.add('Gina')
>>> s
{'Candy', 'Ellena', 'Bob', 'Alice', 'Gina', 'David'}

#如果添加一个已经存在的元素,不会报错,也不会改变什么:
>>> s.add('Alice')
>>> s
{'Candy', 'Ellena', 'Bob', 'Alice', 'Gina', 'David'}
3.1.2 update()批量添加
>>> s = set(['Alice', 'Bob'])
>>> new_s = ['Hally', 'Isen', 'Jenny', 'Karl']
>>> s.update(new_s)  #这里的new_s是列表
								      #这两行可以直接:s.update(['Hally', 'Isen', 'Jenny', 'Karl'])
>>> s
{'Karl', 'Bob', 'Alice', 'Hally', 'Isen', 'Jenny'}

3.2 删

3.2.1 删除一个元素remove()
>>> s = set(['Jenny', 'Ellena', 'Alice', 'Candy'])
>>> s.remove('Alice')
>>> s
{'Jenny', 'Candy', 'Ellena'}

#如果要删除的元素不在集合中,会报错
>>> s.remove('David')  
Traceback (most recent call last):
  File "<pyshell#356>", line 1, in <module>
    s.remove('David')
KeyError: 'David'
3.2.2 不会报错的删除方法discard()
>>> s = set(['Jenny', 'Ellena', 'Alice', 'Candy'])
>>> s.discard('Alice')
>>> s
{'Jenny', 'Candy', 'Ellena'}
>>> s.discard('David')
>>> s
{'Jenny', 'Candy', 'Ellena'}
3.2.3 清除所有元素的方法clear()
>>> s = set(['Jenny', 'Ellena', 'Alice', 'Candy'])
>>> s.clear()
>>> s
set()

3.3 查

3.3.1 读取set元素
>>> s = set(['Jenny', 'Ellena', 'Alice', 'Candy'])
>>> 'Alice' in s
True
>>> 'Bob' in s
False
3.3.2 集合的子集和超集

set提供方法判断两个set之间的关系,比如两个集合set,判断其中一个set是否为另外一个set的子集或者超集。

>>> s1 = set([1,2,3])
>>> s2 = set([1,2,3,4,5])
>>> s1.issubset(s2)  #s1是s2的子集
True
>>> s2.issuperset(s1)  #s2是s1的超集
True
3.3.3 判断集合是否重合

有时候需要判断两个集合是否有重合的地方,如果使用传统的方法,需要使用for循环一个一个的去判断,非常麻烦,set提供isdisjoint()方法,可以快速判断两个集合是否有重合,如果有重合,返回False,否则返回True。

>>> s1 = set([1,2,3,7])
>>> s2 = set([1,2,3,4,5])
>>> s1.isdisjoint(s2)
False   #重合了1,2,3,返回False