# -*- coding: utf-8 -*-'''
内置数据结构 --- set
''''''
set(集合)
- 一堆确定的无序的唯一的数据,集合中的每一个数据称为一个元素
'''#集合的创建
s =set()print(type(s))print(s)#此时,大括号内一定要有值,否则定义出的是一个dict
s ={1,3,5,6,7,8}#如果只是用大括号定义,则定义的是一个dict类型
d ={}print(type(d))print(d)'''
1、集合的特征
集合内数据无序,即无法使用索引和分片
集合内部数据元素具有唯一性,可以用来排除重复数据
集合内的数据,str、int、float、tuple、冰冻集合,即内部只能
放置可哈希的数据
简要的说可哈希的数据类型,即不可改变的数据结构(字符串str、元组tuple、对象集objects)。
为什么说字符串是可哈希的,因为字符串本来就不是可变的,a=’1’ a=’2’,实际上是a的指针变化了,
从’1’的内存地址 指向了 ‘2’ 的内存地址,我们通过检查一下对象内存地址来简要解释一下:
str1 = '1'
print(id(str1))
str1 = '2'
print(id(str1))
# - 输出
79192448
92888512
# - 可见 str1的指针指向的内存地址发生了改变
# - 实际上'1','2'一旦存在,只要不销毁,内存地址一直不会发生改变
# - 故而字符串 可哈希123456789101112
那么同理,不可哈希的数据类型,即可改变的数据结构 (字典dict,列表list,集合set)
''''''
2、集合序列操作
成员检测
遍历操作
带有元组的集合遍历
'''
s ={1,2,3,"action","4"}print(s)if"action"in s:print("Yes")for i in s:print(i)
s ={(1,2,3),("action","4","sss")}for k,m,n in s:print(k,"--", m,"--", n)'''
3、集合的内涵
普通集合内涵
带条件集合内涵
多循环的集合内涵
'''
s ={123,223,545,3,34,445,555,67,3,445,23,223}print(s)
ss ={i for i in s}print(ss)
sss ={i for i in s if i %2==0}print(sss)
s1 ={1,2,3,4}
s2 ={"a","b","c"}
s ={m * n for m in s1 for n in s2 if m ==2}print(s)'''
4、关于集合的函数
len、max、min、set(生成一个集合)
add: 因为集合无序,无append函数,有add函数
clear:清空set中的值
copy: 拷贝
remove: 移除集合中指定的值,直接改变原有值,如果移除的值不存在,报错
discard: 移除集合中指定的值,直接改变原有值,如果移除的值不存在,不报错
pop: 随机移除一个元素
'''
s ={1,2,3,4,5,6,7,8,9,9}print(len(s))print(max(s))print(min(s))
l =[1,2,3,4,5]
s =set(l)print(s)
s.add(67)print(s)
s.add(2)print(s)
s ={2,5,6,7}print(id(s))
s.clear()print(id(s))#remove和discard区别(“脾气不好”和“脾气好”)
ss ={23,45,67,66,78,78,15,45}print(ss)
ss.remove(45)print(ss)
ss.discard(45)print(ss)
s ={23,455,67,89}
b = s.pop()print(b)print(s)'''
5、关于集合的操作的函数
intersection: 交集
difference: 差集
union: 并集
issubset: 检查一个集合是否为另一个子集
issuperset: 检查一个集合是否为另一个的超集
'''
s1 ={1,2,3,4,5,6}
s2 ={4,5,6,7,8,9}
s_1 = s1.intersection(s2)print(s_1)
s_2 = s1.difference(s2)print(s_2)
s_3 = s1.union(s2)print(s_3)
s_4 = s1.issubset(s2)print(s_4)
s_5 = s1.issuperset(s2)print(s_5)'''
6、关于集合的数学操作的函数
- is ok, + is not allowed
'''
s ={1,2,3}
ss ={1,1}
s_1 = ss - s
print(s_1)
s_2 = s - ss
print(s_2)'''
7、frozen set:冰冻集合,就是不可以进行任何修改的集合
'''
s =frozenset({1,2,3})print(type(s))print(s)
ss ={1,2,3,4}
s_1 = ss - s
print(s_1)