013- Python 常用数据类型操作 - 集合

话不多说,上代码,看结果。

print('1、###########################################################')
# 集合
# 无序的, 不可随机访问的, 不可重复的元素集合
# 与数学中集合的概念类似,可对其进行交、并、差、补等逻辑运算
# 分为可变集合和非可变集合
# set 为可变集合  增、删、改
# frozenset   不可变集合  创建好之后, 无法增删改

# 可变集合
s = {1, 2, 3, 1}
print('1、', s, type(s))
# s = set(iterable)  iterable  字符串、列表、元组、字典等
# dict时,只会获取提Key作为set的元素
# s = set((1, 2, 3, 4, 5))   # Function call can be replaced with set literal
s1 = {'asd'}
s2 = set([1, 2, 3])
s3 = set((1, 2, 3, 4, 5))
s4 = set({'性别': '男', '爱好': '女'})
print('2、', s1, type(s1), s2, type(s2), s3, type(s3), s4, type(s4))

# 集合推导式  set(表达式 for 变量 in XX if 条件)
s = set(x + 10 for x in [1, 2, 3] if x != 2)
print('3、', s)

# 不可见集合
# frozenset(iterable)  其中iterable可以是字符串、列表、元组、字典等
# dict时,只会获取提Key作为set的元素
s1 = frozenset('asd')
s2 = frozenset([1, 2, 3])
s3 = frozenset((1, 2, 3, 4, 5))
s4 = frozenset({'性别': '男', '爱好': '女'})
print('4、', s1, type(s1), s2, type(s2), s3, type(s3), s4, type(s4))
# 集合推导式  frozenset(表达式 for 变量 in XX if 条件)
s = frozenset(x + 10 for x in [1, 2, 3] if x != 2)
print('5、', s)

# 创建空集合时 set()或frozenset(),不能s = {} 会被识别成为字典
# 集合中的元素, 必须是可哈希的值   先理解成不可变类型:字符串、元组    列表就不行
# 如果集合中的元素值出现重复, 则会被合并为1个

print('2、单一集合操作###########################################################')
# 可变集合
# 增 s.add(element)  必须保证添加的元素是可哈希的值
s = {1, 2, 3}
a = (0, 1, 2)
s.add(4)
s.add('123')
s.add(a)
# s.add({'性别': '男', '爱好': '女'})   # TypeError: unhashable type: 'dict'
# s.add([0, 1, 2])   # TypeError: unhashable type: 'list'
print('1、', s)

# 删
# 指定删除set对象中的一个元素 s.remove(element)
# 如果集合中没有这个元素,则返回一个错误
s = set((1, 2, 3))
print('2、', s.remove(1), s)
# print(s.remove(12)) # KeyError: 12

# 指定删除集合中的一个元素  s.discard(element)
# 若没有这个元素,则do nothing
s = {1, 2, 3}
print('3、', s.discard(1), s, s.discard(12), s)

# 随机删除并返回一个集合中的元素  s.pop(element)
# 若集合为空,则返回一个错误
s = {1, 2, 3, 4, 5, 6}
s1 = set()  # 空集合
print('4、', s.pop(), s)
# print(s1.pop())  # KeyError: 'pop from an empty set'

# 清空一个集合中的所有元素 s.clear()
s = {1, 2, 3, 4, 5, 6}
print('5、', s.clear(), s)

# 改
# 元素为不可变类型, 不能修改

# 查
# 通过 for in 进行遍历
s = {1, 2, 3, 4, 5, 6}
for value in s:
    print(value, end='\t')
print()

# 通过迭代器进行访问
its = iter(s)
print(next(its))
print(next(its))
print(next(its))
print('##########')
for value in its:
    print(value)

# 不可见集合
# 不能增删改
# 查
# 通过 for in 进行遍历
s = frozenset((1, 2, 3, 4, 5))
for value in s:
    print(value, end='\t')
print()

# 通过迭代器进行访问
its = iter(s)
print(next(its))
print(next(its))
print(next(its))
print('##########')
for value in its:
    print(value)

print('3、集合之间操作###########################################################')
# 交集
# intersection(Iterable)
# Iterable	字符串
# 列表  元组     字典 只判定key     集合
s = {'1', '2', 'asd', 'asdf'}
s1 = {'1', '2'}
s2 = set({'性别': '男', '爱好': '女'})
s3 = set({'性别': '女'})
print('1、', s.intersection(s1))
print('2、', s3.intersection(s2))

# &
s = {'1', '2', 'asd', 'asdf'}
s1 = {'1'}
print('3、', s1 & s)

# 交集计算完毕后, 会再次赋值给原对象  intersection_update()
# 会更改原对象,只适用于可变集合
s = {'1', '2', 'asd', 'asdf'}
s1 = {'1'}
s2 = frozenset(['1', '2'])
print('4、', s.intersection_update(s1), s)
# print(s2.intersection_update(s), s2)  # AttributeError: 'frozenset' object has no attribute 'intersection_update'

# 并集
s1 = {'1', '2'}
s2 = set({'性别': '男', '爱好': '女'})

print('5、', s1.union(s2), s1)
print('6、', s1 | s2, s1)
print('7、', s1.update(s2), s1)

# 差集
s1 = {'1', '2', '3', '4'}
s2 = {'3', '4', '5', '45'}
print('8、', s1.difference(s2), s1, s2)
print('9、', s1 - s2, s1, s2)
print('10、', s1.difference_update(s2), s1, s2)

# 可变与不可变集合混合运算, 返回结果类型以运算符左侧为主
s1 = {'1', '2', '3', '4'}
s2 = frozenset(('3', '4', '5', '45'))
print('11、', type(s1 - s2), type(s2 - s1))

结果图下图。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值