- 集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
- 基本功能是进行成员关系测试和删除重复元素。
- 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
1. 创建集合
student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
print(student) # 输出集合,重复的元素被自动去掉
{'Jim', 'Rose', 'Mary', 'Jack', 'Tom'}
2. 判断元素是否在集合中
# 成员测试
if 'Rose' in student :
print('Rose 在集合中')
else :
print('Rose 不在集合中')
Rose 在集合中
3.集合运算
# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')
print(a)
print(a - b) # a 和 b 的差集
print(a | b) # a 和 b 的并集
print(a & b) # a 和 b 的交集
print(a ^ b) # a 和 b 中不同时存在的元素
{'a', 'd', 'r', 'b', 'c'}
{'b', 'd', 'r'}
{'l', 'm', 'r', 'a', 'd', 'z', 'b', 'c'}
{'a', 'c'}
{'l', 'm', 'r', 'b', 'd', 'z'}
a = set('abracadabra')
b = set('alacazam')
print(a)
print(b)
a|b
{'a', 'd', 'r', 'b', 'c'}
{'l', 'm', 'a', 'z', 'c'}
{'a', 'b', 'c', 'd', 'l', 'm', 'r', 'z'}
4.集合判空
a = {1,2,3,4,5}
if len(a)!= 0:
print("集合不为空")
else:
print("集合为空")
集合不为空
# 不推荐此种方法判断
a = {1,2,3,4,5}
if not a:
print("集合空")
else:
print("集合不为空")
集合不为空
5.集合练习
建立以下两个集合并按要求操作
- a=set([1,2,3,4,5])
- b=set([2,4,6,8,10])
- 求并、交、差、异或、子集
- 求添加、删除、是否空集
a = set([1,2,3,4,5])
b = set([2,4,6,8,10])
print(a)
print(b)
print(a | b) #并集
print(a & b) #交集
print(a - b) #差
print(a ^ b) #异或
print(f"a 是 b 的子集吗:{a.issubset(b)}")
print(f"b 是 a 的子集吗:{a.issuperset(b)}" )
c = set([1,2,3])
print(f"c 是 a 的子集吗:{c.issubset(a)}")
print(f"c 是 a 的子集吗:{a.issuperset(c)}")
# 添加
a.add(6)
a.add(7)
a.add(8)
a.add(9)
print(a)
# 删除
a.remove(9)
print(a)
# 判断集合为空
if len(a)==0:
print("集合为空。")
else:
print("集合不为空。")
{1, 2, 3, 4, 5}
{2, 4, 6, 8, 10}
{1, 2, 3, 4, 5, 6, 8, 10}
{2, 4}
{1, 3, 5}
{1, 3, 5, 6, 8, 10}
a 是 b 的子集吗:False
b 是 a 的子集吗:False
c 是 a 的子集吗:True
c 是 a 的子集吗:True
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8}
集合不为空。
6. 集合的应用实例--推荐电影
# 推荐电影
from random import randrange
# 其它用户喜欢看的电影清单
data = {"user"+str(i):{"film"+str(randrange(1,10)) for j in range(randrange(15))} for i in range(10)}
#待测用户看过的电影
user = {"film1","film2","film3"}
# 查找与待测用户最相似的用户和他喜欢看的电影
similarUser, films = max(data.items(), key=lambda item: len(item[1]&user))
print("历史数据")
for u, f in data.items():
print(u, f, sep=":")
print("和您最相似的用户是:", similarUser)
print("Ta 最喜欢看的电影是:",films)
print("Ta 看过的电影您没看过的有:",films - user)
历史数据
user0:{'film9', 'film1', 'film7'}
user1:{'film5', 'film1', 'film3', 'film7'}
user2:{'film2'}
user3:{'film9', 'film2', 'film5', 'film4', 'film8', 'film1', 'film3'}
user4:{'film6', 'film9', 'film2', 'film4', 'film8', 'film1', 'film3'}
user5:set()
user6:{'film2'}
user7:{'film4', 'film9', 'film1', 'film2'}
user8:{'film6', 'film9', 'film2', 'film5', 'film4', 'film3', 'film7'}
user9:{'film2', 'film3', 'film5'}
和您最相似的用户是: user3
Ta 最喜欢看的电影是: {'film9', 'film2', 'film5', 'film4', 'film8', 'film1', 'film3'}
Ta 看过的电影您没看过的有: {'film4', 'film9', 'film8', 'film5'}