Python小白到老司机,快跟我上车!基础篇(十一)

1、集合(Set)

列表元组通过索引查找元素,字典通过键来查找元素,而接下来的集合无法去索引某个具体的元素,集合里的元素「无序」,且「自动去重」,使用「{}大括号」包裹元素,使用逗号进行分隔。另外有一点要注意:创建 空集合 必须使用 set()函数 来构建,而不能直接用{},直接一个{}的话,会直接创建一个空字典,而不是一个空集合

① 集合的基本操作

代码示例如下

# 1.集合创建
set_1 = set() # 创建一个空集合
set_2 = {1, 2, 3, 4, 5, 1, 2} # 普通方式创建集合,重复元素会被自动删除
set_3 = set('12345') # 通过字符串构建,注意元素无序
set_4 = frozenset({1,2,3,4}) # 创建一个不可变集合

print("1.集合创建:")
print(set_1)
print(set_2)
print(set_3)
print(set_4)

# 2.判断元素是否在集合中
print("\n2.元素是否在集合中:")
print('集合中有6这个元素:%s' % (6 in set_1)) # 判断集合中是否有此元素
print('集合中没有7这个元素:%s' % (7 not in set_1)) # 判断集合中是否有此元素

# 3.集合增删元素
print("\n3.增删集合中的元素:")
set_1.add(6)
print("往集合中插入一个元素6后:%s" % set_1)

set_1.remove(6) # 如果删除的元素不存在会报错,建议先判断下是否存在运算再删除
print("往集合中删除一个元素6后:%s" % set_1)

set_1.discard(6) # 删除集合中的一个元素,如果元素不存在,不执行任何操作
print("删除集合中的一个元素6后:%s" % set_1)

set_2.pop() # 无序随机删除并返回任意一个集合元素,集合为空会引发KeyError
print("随机弹出集合中的一个元素后:%s" % set_2)

# 4.集合遍历
print("\n4.遍历集合中的元素:\n set_2 =", end='')
for data in set_2:
    print(data, end='\t')

# 5.清空集合
set_2.clear()
print("\n\n5.清空集合中的元素 :%s" % set_2)

运行结果如下

1.集合创建:
set()
{1, 2, 3, 4, 5}
{'5', '3', '1', '4', '2'}
frozenset({1, 2, 3, 4})
2.元素是否在集合中:
集合中有6这个元素:False
集合中没有7这个元素:True
3.增删集合中的元素:
往集合中插入一个元素6后:{6}
往集合中删除一个元素6后:set()
删除集合中的一个元素6后:set()
随机弹出集合中的一个元素后:{2, 3, 4, 5}
4.遍历集合中的元素:
set_2 =2    3   4   5 
5.清空集合中的元素 :set()

② 集合运算相关的操作

代码示例如下

set_1 = {'a', 'b', 'c', 'd', 'e', 'f'}
set_2 = set('cdefgh')
set_3 = set('ab')


# 进行数学集合运算
# 子集,集合为某个集合的一部分,使用操作符<,或issubset()进行判断
print('集合set_2是集合set_1的子集:%s' % (set_2 < set_1))
print('集合set_3是集合set_1的子集:%s' % (set_3.issubset(set_1)))

# 并集,两个集合所有元素构成的集合,使用操作符 | 或 union() 函数完成
print("集合set_1和集合set_2的并集:%s" % (set_1 | set_2))
print("集合set_1和集合set_2的并集:%s" % (set_1.union(set_2)))

# 交集,同时存在于两个集合中的元素构成的集合,使用操作符 & 或 intersection() 函数完成
print("集合set_1和集合set_2的交集:%s" % (set_1 & set_2))
print("集合set_1和集合set_2的交集:%s" % (set_1.intersection(set_2)))

# 差集,集合里有另一个集合里没有的元素构成的集合,使用操作符 - 或 difference() 函数完成
print("集合set_1和集合set_2的差集:%s" % (set_1 - set_2))
print("集合set_1和集合set_2的差集:%s" % (set_1.difference(set_2)))

# 对称差,只属于其中一个集合而不属于另一个集合的元素组成的集合
# 或者理解成全集除去交集部分元素后剩下的元素组成的集合
# 使用操作符 ^ 或 symmetric_difference() 函数完成
print("集合set_1和集合set_2的对称差:%s" % (set_1 ^ set_2))
print("集合set_1和集合set_2的对称差:%s" % (set_1.symmetric_difference(set_2)))

运行结果如下

集合set_2是集合set_1的子集:False
集合set_3是集合set_1的子集:True
集合set_1和集合set_2的并集:{'h', 'b', 'd', 'c', 'f', 'g', 'e', 'a'}
集合set_1和集合set_2的并集:{'h', 'b', 'd', 'c', 'f', 'g', 'e', 'a'}
集合set_1和集合set_2的交集:{'c', 'e', 'd', 'f'}
集合set_1和集合set_2的交集:{'c', 'e', 'd', 'f'}
集合set_1和集合set_2的差集:{'b', 'a'}
集合set_1和集合set_2的差集:{'b', 'a'}
集合set_1和集合set_2的对称差:{'h', 'b', 'g', 'a'}
集合set_1和集合set_2的对称差:{'h', 'b', 'g', 'a'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值