python collections(集合)

# -*- coding: utf-8 -*-

'''
python set集合  set 不记录添加顺序,元素不允许重复
set集合本身是可变的,除了提供add(),remove()、discard()方法来操作单个元素,还可以进行集合运算来改变集合内的元素
交集运算: intersection() 和intersection_update()
并集运算:union() 和 update()
减法运算:difference() 和 difference_update()
前者都不改变集合本身,返回两个集合 运算后的结果, 后者会直接改变第一个集合
'''

# {} --> 构建set集合
s = {'斗罗大陆', '斗破苍穹', '武动乾坤', '大主宰', '遮天', '灵域'}
# 添加元素 add()
s.add('全职高手')
s.add(123)
print('s集合元素个数为: ', len(s))
print('当前s集合元素为: ', [x for x in s])

# 删除指定元素
s.remove('全职高手')
print('当前s集合元素为: ', [x for x in s])

# 判断是否包含指定字符串
print("s集合是否包含'大主宰':", ('大主宰' in s))
print("s集合是否包含456:", (456 in s))

# set()函数创建set集合
books = set()
books.add('遮天')
books.add('灵域')
books.add('jsp程序设计')
books.add('java编程思想')
books.add('python程序设计')
# A.issubset(B)  A <= B   判断A集合是否是B的子集和
print('books集合是否是s集合的子集合:%s' % (books.issubset(s)))
print('books集合是否是s集合的子集合:%s' % (books <= s))

# issuperset() 与issubset() 作用相反
# A.issuperset(B)   A >= B  判断A集合是否完全包含B集合
print('s集合是否完全包含books集合 %s,%s' % (s.issuperset(books), s >= books))

# 集合减法  A - B , A.difference(B) 不改变集合A, A.difference_update(B) 集合A改变
result = s - books
print('result集合元素为:', [x for x in result])
print('当前集合元素为:', s.difference(books))
s.difference_update(books)  # s集合减去books集合,直接改变s集合本身
print('当前s集合元素为:', s)

# 删除集合中所有元素
s.clear()

a = {'疯狂英语', 'python程序设计', 'java编程思想', 'Android开发'}
print('a集合元素为:', a)

# 计算两个集合的交集 ,不改变集合本身 insertsection() , &
b = a & books
print('a集合 books集合的交集元素为:', [x for x in b])
print('a集合 books集合的交集元素为: ', a.intersection(books))

# 计算交集,改变集合本身
a.intersection_update(b)
print('当前a集合的元素为:', a)

# range对象包装成set集合
c = set(range(5))
d = set(range(3, 7))
print(c)
print(d)

# 对两个集合进行异或运算  集合异或:两个集合的并集减去两个集合的交集
xor = c ^ d
print('集合c和d 异或后的结果', xor)

# 计算两个集合的并集,不改变集合本身
e = c.union(d)
print('集合c、d合并后的集合元素为:', e)

# 集合并集 改变集合本身
c.update(d)
print('update后的集合c为:',c)

# frozenset  set的不可变版本  set集合中能改变集合本身的方法 frozenset都不支持,不改变集合本身的方法,frozenset都支持
print([e for e in dir(frozenset) if not e.startswith('_')])
'''
frozenset 作用有两点:
1. 当集合元素不需要改变时,使用frozenset代替set更安全
2. 某些API需要不可变对象时,必须用frozenset代替set,比如dict的key必须是不可变对象,再比如set集合本身的元素必须是不可变的,
'''

S = set()
# set集合无序,无重复值
frozen_set = frozenset('aaabbbccc')
# 为set集合添加frozenset
S.add(frozen_set)
print('集合S的元素为:',S)
comm_s = {'dddeee'}
# 为集合添加普通set集合,出现错误  unhashable type: 'set'
# S.add(comm_s)

运行结果:

python collections(集合)_第1张图片

你可能感兴趣的:(python)