【集合set】
1.集合的特征:
集合是【可变】的容器
集合内的数据对象是唯一的(不能重复多次)
集合是无序的存储结构,集合中的数据没有先后关系
集合内的元素必须是不可变对象
集合是可迭代的
集合是相当于只有键没有值的字典(键则是集合的数据)
2.创建集合:
1.创建空集合:
s = set() # 只有这一种方法创建非空集合(注意:s = () 是创建元组,s = {} 是创建字典)
2.创建非空集合
s = {1,2,3}
3.集合的构造函数:
set() 创建空集合
set(iterable) 用可迭代对象创建一个新的集合对象
示例:
s = set('ABC')
s = set({1:'一',2:'二'}) # {1,2} 只有键
>>> d = {1:'one',2:'two'}
>>> d
{1: 'one', 2: 'two'}
>>> set(d.values()) # 把值打出
{'two', 'one'}
>>> set(d.items()) # 把键值对打出
{(1, 'one'), (2, 'two')}
s = set([1,2,3,4])
s = set([1,2,[3,4]]) # 错的,[3,4]是可变对象,列表里不能再有列表!!!!!!!
s = set((1,2,3,4))
4.集合的运算:
交集,并集,补集,子集,超集
描述方法:
s1 = {1,2,3}
s2 = {2,3,4}
生产两个集合的交集 & 读作('z' 'da')
s3 = s1 & s2
s3 = {2,3}
生成两个集合的并集 |
s3 = s1 | s2
s3 = {1,2,3,4}
生成两个集合的补集 - (减号)
s3 = s1 - s2 (属于s1,不属于s2)
s3 = {1}
生成两个集合的对称补集 ^
s3 = s1 ^ s2
s3 = {1,4} # 等同于s3 = (s1 - s2) | (s2 - s1)
判断一个集合是另一个集合的超集 > (大于号)
判断一个集合是另一个集合的子集 < (小于号)
例如:
s1 = {2,3}
s2 = {1,2,3}
s1 < s2 .....True,s2 > s1 ......True
== 或 != 判断相同或不同
{1,2,3} == {2,3,1} #True
另:
>= 超集或相同 <= 子集或相同
5.in / not in 运算符:
等同于字典,in 运算符用于集合中,当某个值存在于集合中,则为真,否则为假
6.python3中可用于集合的函数:
len(x) max(x) min(x) sum(x) any(x) all(x)
7.集合中常用的方法:
set.add(e) 在集合中添加一个新的元素,如果e存在,则不添加
set.remove(e) 从集合中删除一个元素,如果元素不存在集合中,则会产生一个keyError错误
set.discard(e) 从集合中移除一个元素,没有也不会产生错误
set.clear() 清空集合中所有元素
set.copy() 将集合进行依次浅拷贝(不会改变原来的)
set.pop() 从集合s中删除一个随机元素,如果集合为空,则引发一个keyError错误
set1.update(set2) 用set1 和set2更新集合set1
>>> s1 = {1,3,5}
>>> s1
{1, 3, 5}
>>> s2 = {2,4,6}
>>> s2
{2, 4, 6}
>>> s1.update(s2)
>>> s1
{1, 2, 3, 4, 5, 6}
8.对于不可变对象,有时复合赋值运算符不同于运算符后再赋值
s1 = {1,2,3}
s2 = {2,3,4}
s = s1
if True:
s1 = s1 | s2 # 对于可变对象,不等同于s1 |= s2
print(s) # {1,2,3}
else:
s1 |= s2 # 改变了原来的对象
print(s) # {1,2,3,4}
9.集合推倒式:
用可迭代对象来创建(生成)集合的表达式
语法:
{表达式 for 变量 in 可迭代对象 [if 真值表达式]]} # []括号内容可省略
示例:
l = [1,3,5,7]
s = {x ** 2 for x in l}
10.集合推倒式的嵌套规则与列表推倒式相同:
示例:
>>> {x + y for x in 'ABC' for y in '123'}
{'A2', 'B2', 'C2', 'A3', 'B1', 'B3', 'A1', 'C3', 'C1'}
11.固定集合(frozenset):
1.概念:
创建一个不可变的,无序的,含有唯一元素的集合
固定集合是集合set的不可变版本
2.作用:
固定集合可以作为字典的键,也可以作为集合的值
3.固定集合的创建方法:
创建空的固定集合:
fs = frozenset()
创建非空的固定集合:
fs = frozenset([2,3,5,7])
s = {{1,2,3},4,5,6} # 这样是错的,集合是可变的,集合内的元素必须是不可变对象。
s = {frozenset{1,2,3,},4,5,6} # 这样才是正确的,frozenset是集合的不可变版本,这样就可以往里放
4.固定集合的构造函数:
frozenset() 创建空的固定集合
frozenset(iterable) 用可迭代对象创建一个固定集合
5.固定集合的运算:
交集 、 并集 、 补集 、 对称补集 、
> >= < <= != ==
in / not in
(以上规则等同于set中的用法)
6.固定集合的方法:
相当于集合的全部方法去掉修改集合的方法
【总结】
-
数据类型:
不可变类型:
int ,float ,complex ,bool ,str ,【tuple】 ,frozenset(固定集合) ,bytes(字节串)
注意:元组是不可变的,不可以通过索引改变它的值
可变类型:
list ,dict ,set ,bytearray(字节数组) -
运算符:
+ - * / // % **
< > <= >= == !=
is / is not
in / not in
& | ^
+(正号) -(负号) -
表达式:
条件表达式 x if x > y else y -
赋值语句:x,y = 100,200
-
语句:if 语句,while语句,for语句,break语句,continue语句,pass语句,del语句