集合set是一类无序的,没有重复元素的迭代对象
set的元素必须是可哈希的,可以是元组,字符串,但是不能是列表,字典等
创建
sets={1,2,'a',1}
print(sets)
#out: {1, 2, 'a'}
dic={'a': 5, 'b': 4, 'c': 3}
sets=set(dic.items())
lst=list(dic.items())
print(sets,'$',lst)
#out: {('c', 3), ('b', 4), ('a', 5)} $ [('a', 5), ('b', 4), ('c', 3)]
添加元素
sets.add(1) #添加一个元素
print(sets)
sets.update([2,3,4]) #批量添加
print(sets)
#out: {('c', 3), ('a', 5), ('b', 4), 1} {1, 2, 3, 4, ('a', 5), ('b', 4), ('c', 3)}
删除元素
因为sets是无序的,所以不能根据索引来删除,只能根据值来进行删除
print('删除') #因为set是无序的所以不能根据索引来删除,只能根据值来删除
s=sets.pop() #删除的是set排序的第一个最后一个,但是set是无序的,所以一般不用这种方式删除
print(sets,'$',s)
sets.remove(2) #根据值来删除,只能删除一个
print(sets)
#集合更多的删除添加操作都是通过集合的交并补差来实现的
#out:
#{2, 3, 4, ('a', 5), ('b', 4), ('c', 3)} $ 1
#{3, 4, ('a', 5), ('b', 4), ('c', 3)}
集合操作
a={1,2,3}
b={4,5,6}
c={'a','b','c'}
#并集
set1=a.union(b,c)
print(set1)
#交
set2=set1.intersection(b)
print(set2)
#差
set3=set1.difference(c)
print(set3)
#交并差,都可以添加多个集合参数
#is subset?
print(set2.issubset(set1))
print(c.issubset(set3))
#并集
{1, 2, 3, 4, 5, 6, 'b', 'c', 'a'}
#交
{4, 5, 6}
#差
{1, 2, 3, 4, 5, 6}
#是否为子集
True
False
冻结集合
**frozenset()**创建一个冻结集合,一旦创建不允许曾删元素,相当于列表与元组的关系。只能被重新定义。
frozenset不能使用add,pop等增删操作,但是可以使用交并差等集合操作,因为这些操作并不直接修改原集合
fsets=frozenset([1,1,2,3])
sets=set(['a','b','c'])
print(fsets)
set1=sets.union(fsets)
print(set1)
#Out:
#frozenset({1, 2, 3})
#{1, 'b', 2, 3, 'c', 'a'}