知识点
集合:set
set
和dict
类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
集合中的元素的三个特征:
1)确定性(元素必须可hash)
2)互异性(去重)
3)无序性(集合中的元素没有先后之分),如集合{3,4,5}
和{3,5,4}
算作同一个集合
【注意】:集合存在的意义就在于去重和关系运算。
创建集合
创建一个空集合需使用set() 工厂函数:
语法:
class set([iterable])
参数说明:
iterable
示例:
>>> set1 = set()
>>> type(set1)
<class 'set'>
>>> set2 = {11,22,33,12,11}
>>> type(set2)
<class 'set'>
>>> set2
{33, 11, 12, 22}
【注意】:注意在创建空集合的时候只能使用s=set()
,因为s={}
创建的是空字典
>>> a = set('boy')
>>> a
{'b', 'y', 'o'}
>>> b = set(['y','b','o','o'])
>>> b
{'b', 'y', 'o'}
>>> f = set(('k1','k1','k2','k3',1,2))
>>> f
{1, 2, 'k2', 'k3', 'k1'}
>>> c = set({'k1':1,'k2':2,'k3':2})
>>> c
{'k2', 'k1', 'k3'}
>>> type(c)
<class 'set'>
>>> d = {1,2,3,4}
>>> type(d)
<class 'set'>
>>> d
{1, 2, 3, 4}
>>> e = {(1,2,1,1)}
>>> e
{(1, 2, 1, 1)}
创建不可变集合
frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
语法:
class frozenset([iterable])
参数
iterable
示例:
>>>a = frozenset(range(10))
>>> a
frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = frozenset('runoob')
>>> b
frozenset(['b', 'r', 'u', 'o', 'n'])
>>> num3 = frozenset([1,2,3,4,5])
>>> num3
frozenset({1, 2, 3, 4, 5})
>>> num3.add(0)
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
num3.add(0)
AttributeError: 'frozenset' object has no attribute 'add'
集合的关系运算
in
,not in
:判断某元素是否在集合内
>>> a
{'b', 'y', 'o'}
>>> b in a
False
>>> 'b' in a
==
,!=
:判断两个集合是否相等
>>> a = {3,4,5}
>>> b = {4,3,5}
>>> a == b
True
集合的内建方法
集合(s).方法名 |
等价符号 |
方法说明 |
s.issubset(t) |
s <= t |
子集测试(允许不严格意义上的子集):s中所有的元素都是t的成员 |
|
s < t |
子集测试(严格意义上):s中所有的元素都是t的成员 |
示例:
>>> s = {1,2,3,4}
>>> t = {1,2,3,4,5}
>>> s.issubset(t)
True
>>> s <= t
True
>>> s < t
集合(s).方法名 |
等价符号 |
方法说明 |
s.issuperset(t) |
s >= t |
超集测试(允许不严格意义上的超集):t中所有的元素都是s的成员 |
|
s > t |
超集测试(严格意义上):t中所有的元素都是s的成员 |
示例:
>>> s = {1,2,3,4,5}
>>> t = {1,2,3}
>>> s.issuperset(t)
True
>>> s >= t
True
>>> s > t
True
集合(s).方法名 |
等价符号 |
方法说明 |
s.union(t) |
s | t |
合并操作:s “或” t 中的元素 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.union(t)
{1, 2, 3, 4, 5}
>>> s|t
{1, 2, 3, 4, 5}
集合(s).方法名 |
等价符号 |
方法说明 |
s.intersection(t) |
s & t |
交集操作:s “与” t 中的元素 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s & t
{2, 3, 4}
>>> s.intersection(t)
{2, 3, 4}
集合(s).方法名 |
等价符号 |
方法说明 |
s.difference(t) |
s - t |
差分操作:在s中存在,在t中不存在的元素 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s - t
{1}
>>> s.difference(t)
{1}
集合(s).方法名 |
等价符号 |
方法说明 |
s.symmetric_difference(t) |
s ^ t |
对称差分操作:s “或” t 中的元素,但不是s和t的共有元素 |
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.symmetric_difference(t)
{1, 5}
>>> s ^ t
{1, 5}
集合(s).方法名 |
等价符号 |
方法说明 |
s.copy() |
|
返回s的浅拷贝 |
示例:
>>> a = {1,2,3}
>>> b = a.copy()
>>> b
{1, 2, 3}
集合(s).方法名 |
等价符号 |
方法说明 |
以下方法不适用于不可变集合frozenset() |
|
|
s.update(t) |
s |= t |
将t中的元素添加到s中 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s |= t
>>> s
{1, 2, 3, 4, 5}
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.update(t)
>>> s
{1, 2, 3, 4, 5}
集合(s).方法名 |
等价符号 |
方法说明 |
以下方法不适用于不可变集合frozenset() |
|
|
s.intersection_update(t) |
s &= t |
交集修改操作:s中仅包括s和t中共有的成员 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.intersection_update(t)
>>> s
{2, 3, 4}
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s &= t
>>> s
{2, 3, 4}
集合(s).方法名 |
等价符号 |
方法说明 |
以下方法不适用于不可变集合frozenset() |
|
|
s.difference_update(t) |
s -= t |
差修改操作:s中包括仅属于s但不属于t的成员 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s -= t
>>> s
{1}
集合(s).方法名 |
等价符号 |
方法说明 |
以下方法不适用于不可变集合frozenset() |
|
|
s.symmetric_difference_update(t) |
s ^= t |
对称差分修改操作:s中包括仅属于s或仅属于t的成员 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s ^= t
>>> s
{1, 5}
集合(s).方法名 |
等价符号 |
方法说明 |
以下方法不适用于不可变集合frozenset() |
|
|
s.add(obj) |
|
加操作:将obj元素添加到s中 |
示例:
>>> s = {1,2,3,4}
>>> s.add('fs')
>>> s
{1, 2, 3, 4, 'fs'}
集合(s).方法名 |
等价符号 |
方法说明 |
以下方法不适用于不可变集合frozenset() |
|
|
s.remove(obj) |
|
删除操作:将obj元素从s中删除,如果s中不存在obj,将引发异常 |
示例:
>>> s = {1, 2, 3, 4, 'fs'}
>>> s.remove('fs')
>>> s
{1, 2, 3, 4}
>>> s.remove('a')
Traceback (most recent call last):
File "<pyshell#182>", line 1, in <module>
s.remove('a')
KeyError: 'a'
集合(s).方法名 |
等价符号 |
方法说明 |
以下方法不适用于不可变集合frozenset() |
|
|
s.discard(obj) |
|
丢弃操作:将obj元素从s中删除,如果s中不存在obj,也没事 |
示例:
>>> s = {1, 2, 3, 4, 'fs'}
>>> s.discard('fs')
>>> s
{1, 2, 3, 4}
>>> s.discard('a')
>>> s
{1, 2, 3, 4}
集合(s).方法名 |
等价符号 |
方法说明 |
以下方法不适用于不可变集合frozenset() |
|
|
s.pop() |
|
弹出操作:移除并返回s中任意一个元素 |
s.clear() |
|
清除操作:请出s中所有的元素 |
>>> s = {1, 2, 3, 4}
>>> s.pop()
1
>>> s
{2, 3, 4}
>>> s.pop()
2
>>> s
{3, 4}
>>> s.clear()
>>> s
set()