PYTHON基础

7.集合set

2020-12-14  本文已影响0人  Stone_説

目录
0.集合介绍
1.集合的定义和初始化
2.集合元素增加
3.集合元素删除
4.集合运算

0.集合介绍

非线性的数据结构,元素不可以索引
可变,无序,不重复的元素的集合
集合最大的用处就是去重
集合的元素必须是可hash的,集合元素可以迭代

1.集合的定义和初始化

set() -> new empty set object
set(iterable) -> new set object

>>> s1 = set()
>>> s1
set()
>>> s2 = set(range(5))
>>> s2
{0, 1, 2, 3, 4}
>>> s3 = set([1,2,3,4])
>>> s3
{1, 2, 3, 4}
>>> s4 = {}
>>> s4,type(s4)
({}, <class 'dict'>)
>>> s5 = {(1,2),4,'c'}
>>> s5
{'c', (1, 2), 4}
>>> s6 = {2,[2,3],'d'}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

2.集合元素的增加

2.1 add(elem)

增加一个元素到set中
如果元素存在,不做任何操作

>>> s1 = {1,2,3,4,5}
>>> s1.add(0)
>>> s1
{0, 1, 2, 3, 4, 5}
>>> s1.add(2)
>>> s1
{0, 1, 2, 3, 4, 5}
>>> s1.add((21,4,5))
>>> s1
{0, 1, 2, 3, 4, 5, (21, 4, 5)}
>>> s1.add([2,4])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
2.3 update(*others)

合并其他元素到set集合中来
参数others必须是可迭代对象

>>> s1 = {1,2,3,4,5}
>>> s1.update([2,4,5,6])
>>> s1
{1, 2, 3, 4, 5, 6}
>>> s1.update((23,4,5))
>>> s1
{1, 2, 3, 4, 5, 6, 23}
>>> s1.update('abc')
>>> s1
{1, 2, 3, 4, 5, 6, 'a', 'b', 'c', 23}
>>> s1.update(8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

3.集合元素的删除

3.1 remove(elem)

从set中移除一个元素,元素不存在,抛出KeyError异常

>>> s1 = {1,2,3,4,5}
>>> s1.remove(1)
>>> s1.remove(3)
>>> s1
{2, 4, 5}
>>> a = s1.remove(100)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 100
3.2 discard(elen)

从set中移除一个元素,元素不存在,不做任何操作

>>> s1 = {1,2,3,4,5}
>>> s1.discard(2)
>>> s1.discard(1)
>>> s1.discard(100)
>>> s1
{3, 4, 5}
3.3 pop() -> item

移除并返回任意的元素,空集返回KeyError异常

>>> s1 = {1,2,3,4,5}
>>> s1.pop(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)
>>> s1.pop()
1
...
>>> s1.pop()
5
>>> s1.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'
3.4 clear()

移除所有元素

>>> s1 = {1,2,3,4,5}
>>> s1.clear()
>>> s1
set()
3.5 成员运算符

in 和 not in

>>> s1 = {1,2,3,4,5}
>>> 1 in s1
True
>>> 23 in s1
False

4.集合运算

4.1 并集运算

将两个集合A和B的所有元素合并到一起,组成的集合称作集合A和集合B的并集
union(*others) -> 返回和多个集合合并后的新的集合

>>> s1 = {1,2,3}
>>> s2 = {4,5,6}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6}
>>> s3
{8, 9, 7}
>>> s1.union(s2,s3)
{1, 2, 3, 4, 5, 6, 7, 8, 9}

| 运算符重载,等同于union

>>> s1,s2,s3
({1, 2, 3}, {4, 5, 6}, {8, 9, 7})
>>> s1 | s2 | s3
{1, 2, 3, 4, 5, 6, 7, 8, 9}

update(*others) -> 和多个集合合并,就地修改

>>> s1,s2,s3
({1, 2, 3}, {4, 5, 6}, {8, 9, 7})
>>> s1.update(s2,s3)
>>> s1
{1, 2, 3, 4, 5, 6, 7, 8, 9}

|= 等同于update

>>> s1,s2,s3
({1, 2, 3}, {4, 5, 6}, {8, 9, 7})
>>> s1 |= s2
>>> s1
{1, 2, 3, 4, 5, 6}
4.2 交集运算

集合A和集合B,由所有属于A且属于B的元素组成的集合
intersection(*other) -> 返回和多个集合的元素

>>> s1,s2,s4
({1, 2, 3, 4, 5, 6}, {4, 5, 6},{10, 22})
>>> s1.intersection(s2)
{4, 5, 6}
>>> s1.intersection(s4)
set()

& -> 等同intersection

>>> s1,s2,s4
({1, 2, 3, 4, 5, 6}, {4, 5, 6},{10, 22})
>>> s1 & s2
{4, 5, 6}
>>> s1 & s4
set()

intersection_update(*others) -> 获取和多个集合的交集,并就地修改

>>> s1,s2,s4
({1, 2, 3, 4, 5, 6}, {4, 5, 6}, {10, 4, 22, 6})
>>> s1.intersection_update(s2,s4)
>>> s1
{4, 6}

&= -> 等同intersection_update

>>> s2,s4
({4, 5, 6}, {10, 4, 22, 6})
>>> s2 &= s4
>>> s2
{4, 6}
4.3 差集运算

集合A和B,由所有属于A且不属于B的元素组成的集合
difference(*others) -> 返回和多个集合的差集

>>> s1 = {1,2,3,4}
>>> s2 = {2,3}
>>> s1.difference(s2)
{1, 4}
>>> s3 = {1,2,3,4,5}
>>> s1.difference(s3)
set()

- 等同于difference

>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 - s2
{1, 4}
>>> s1 - s3
set()

difference_update(*others) -> 获取和多个集合的差集并就地修改

>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.difference_update(s2)
>>> s1,s2
({1, 4}, {2, 3})
>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.difference_update(s2,s3)
>>> s1
set()

-= 等同于difference_update

>>> s1 = {1,2,3,4}
>>> s2 = {2,3}
>>> s1 -= s2
>>> s1
{1, 4}
4.4 对称差集

集合A和B,由所有不属于A和B的交集元素组成的集合,记作(A-B) U (B-A)
symmetric_difference(other) -> 返回和另一个集合的差集

>>> s1 = {1,2,3,4}
>>> s2 = {2,3}
>>> s3 = {1,2,3,4,5}
>>> s1.symmetric_difference(s2)
{1, 4}
>>> s1.symmetric_difference(s3)
{5}

^ 等同symmetric_difference

>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 ^ s2
{1, 4}
>>> s1 ^ s3
{5}

symmetric_difference_update(other) -> 获取和另一个集合的差集并就地修改

>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.symmetric_difference_update(s2)
>>> s1
{1, 4}
>>> s1.symmetric_difference_update(s3)
>>> s1
{2, 3, 5}

^= 等同于symmetric_difference_update

>>> s1,s2,s3
({2, 3, 5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 ^= s2
>>> s1
{5}
4.5 其他

issubset(other),<= -> 判断当前集合是不是另一个集合的子集

>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.issubset(s2)
False
>>> s1.issubset(s3)
True

set1 < set2 -> 判断set1是否是set2的真子集

>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 < s2
False
>>> s2 < s3
True

issuperset(other),>= -> 判断当前集合是否是other的超集

>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.issuperset(s2)
False
>>> s3.issuperset(s2)
True

set1 > set2 判断set1是否是set2的真超集

>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 > s2
False
>>> s3 > s2
True

isdisjoint(other) -> 当前集合和另一个集合有没有交集,没有交集返回True

>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.isdisjoint(s2)
True
>>> s1.isdisjoint(s3)
False
上一篇 下一篇

猜你喜欢

热点阅读