集合,与之前提到的元组看起来会比较相似,但是与元组又有很大的区别。
最显著的区别有:
元组时不可变数据类型,集合是可变数据类型
>>> s = {1,2,3};s
{1, 2, 3}
>>> type(s)
>>> s = set();s
set()
>>> type(s)
切记:空集合的创建只能用set()
,不能用{}
,也不能用()
>>> s = {}
>>> s
{}
>>> type(s)
# 直接用{}创建的是字典
>>> s = ()
>>> type(s)
# 直接用()创建的是元组
# 可以添加多个元素,但必须要用`()`包起来
>>> s = set()
>>> s.add((1,2,'a','b'))
>>> s
{(1, 2, 'a', 'b')}
#若添加的元素已经存在,不会发生改变
>>> s = set()
>>> s.add(1)
>>> s
{1}
>>> s.add((1,2,3))
>>> s
{1, (1, 2, 3)}
>>> s.add(1)
>>> s
{1, (1, 2, 3)}
>>> s.add((1))
>>> s
{1, (1, 2, 3)}
update与add大致相同,都可用于将新的元素添加进集合中,但add将字符串作为一个整体放入,
而update会将字符串拆散
>>> s = set()
>>> s.update((1,2,3))
>>> s
{1, 2, 3}
>>> s1 = set()
>>> s2 = set()
>>> s1.add(('hello'))
>>> s2.update(('hello'))
>>> s1
{'hello'}
>>> s2
{'l', 'e', 'h', 'o'}
>>> s.remove((1,2,3))
>>> s
{1}
若移除的元素不是集合中的元素,则会出现KeyError
>>> s
{1}
>>> s.remove(4)
Traceback (most recent call last):
File "", line 1, in
s.remove(4)
KeyError: 4
discard与remove基本一样,都用于删除内容,最大的区别在于若元素不在集合内,discard后不会报错
>>> s
{1, (1, 2, 3)}
>>> s.discard(1);s
{(1, 2, 3)}
>>> s.discard(4)
集合中的pop与列表中原理上是一致的,但是也存在一定区别:
1> set中的pop,不能加入参数,否则会报错
>>> a={1,(9,2),3}
>>> a.pop(1)
Traceback (most recent call last):
File "", line 1, in
a.pop(1)
TypeError: pop() takes no arguments (1 given
2> set中的pop,是随机弹出集合中的一个元素,不一定弹出第一个
>>> a={1,(9,2),3}
>>> a.pop()
(9, 2)
>>>a={1,(9,2),3}
>>>b=a.copy()
>>>a
{(9, 2), 1, 3}
>>>b
{(9, 2), 1, 3}
查看a和b的id,会发现id值时不相同的,因此a发生改变,不是不会变的
>>> id(a)
1934732752264
>>> id(b)
1934732752936
>>> a.pop()
(9, 2)
>>> a
{1, 3}
>>> b
{(9, 2), 1, 3}
>>> b
{(9, 2), 1, 3}
>>> b.clear()
>>> b
set()
清空后即为空集合
将两个集合拼接,并返回一个新集合
若有重复项会被覆盖掉
>>> a = {1,2,3}
>>> b = a.union({3,4});b
{1, 2, 3, 4}
>>> c = a.union('b')
>>> c
{1, 2, 3, 'b'}
difference:
与其他一个集合或多个集合对比,返回一个与其他集合不一样元素的集合。
>>> a = {1,2,3,4}
>>> b = {2,3,5,7}
>>> a.difference(b)
{1, 4}
>>> b.difference(a)
{5, 7}
difference_update:
与其他一个集合或多个集合对比,删除集合与其他集合一样的元素,不返回新集合。
>>> a = {1,2,3,4}
>>> b = {2,3,5,7}
>>> a.difference_update(b)
>>> a
{1, 4}
intersection:
返回一个和其他集合共同有的元素的集合
>>> a = {1,2,3,4}
>>> b = {2,3,5,7}
>>> b.intersection(a)
{2, 3}
>>> a.intersection(b)
{2, 3}
intersection_update:
与其他一个集合或多个集合对比,删除集合中与其他集合不共有的元素,不返回新集合
>>> a = {1,2,3,4}
>>> b = {2,3,5,7}
>>> a.intersection_update(b)
>>> a
{2, 3}
>>> b
{2, 3, 5, 7}
判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
>>> a = {1,2,3,4}
>>> b = {1,5,6,7}
>>> c = {5,6,7,}
>>> b.isdisjoint(a)
False
>>> c.isdisjoint(a)
True
判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。
>>> a
{1, 2, 3, 4, 5}
>>> b = {1,2,3}
>>> c = {1,2,3,6}
>>> b.issuperset(a)
False
>>> a.issuperset(b)
True
>>> a.issuperset(c)
False
>>>
参考文献:
参考1
参考2
参考3