一、集合创建
集合(Set):在大括号{}之间、用逗号分隔、无序且不重复的元素集合。
集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,而不能包含列表、字典、集合等可变类型的数据。
使用{}运算符创建集合
集合名 = {元素1,元素2,元素3,…}
使用set()函数创建
集合名 = set(sequence)
注:函数set()函数将列表、元组、字符串、range对象等其他可迭代对象转换为集合,如果原来的数据中
存在重复元素
,则
在转换为集合的时候只保留一个
;如果原序列或迭代对象中有不可哈希的值,无法转换成为集合,抛出异常。
二、集合访问
访问和遍历集合的元素
print(Set)
for item in Set: print(item,end=’’)
添加和修改集合元素
集合创建后,可以使用集合函数在集合中添加或修改元素。
(1) set.add(item):增加新元素,如果该元素已存在则忽略该操作,不会抛出异常。
(2) set.update(sequence):合并另外一个序列中的元素到当前集合中,并自动去除重复元素。
删除集合元素
当集合中的元素不再需要时,可以使用集合函数删除集合中指定元素或所有元素。
(1) set.remove(item):删除指定元素item,如果指定元素不存在则抛出异常。
(2) set.discard(item):删除指定元素item,如果元素不在集合中则忽略该操作。
(3)
set.pop():随机删除并返回集合中的一个元素,如果集合为空则抛出异常。
(4) set.clear():清空集合中的所有元素。
三、集合复制和删除
* 可以用set.copy()复制集合,值赋值(浅拷贝).
* 还可以"="复制集合,引用复制(深拷贝).
* 集合删除:del setName
四、集合运算
Python中集合常用运算如下。
(1) set1.union(set2) 或 set1 | set2:并集运算。
(2) set1.intersection(set2) 或 set1 & set2:交集运算。
(3) set1. difference(set2) 或 set1 - set2:差集运算,在set1中而不在set2中的元素。
(4) set1. symmetric_difference(set2) 或 set1 ^ set2:对称差集运算,在set1和set2中去掉相同元素剩下的所有元素。
* item in set 或item not in set:成员运算,返回值为bool
>>> x = {1, 2, 3}
>>> y = {1, 2, 5}
>>> z = {1, 2, 3, 4}
>>> x < y #比较集合大小/包含关系(子集或真子集)
False
>>> z>x #真子集
True
>>> y < z
False
>>> {1, 2, 3} <= {1, 2, 3} #子集
True
五、集合统计
集合的最大值 : max(set)
集合的最小值 : min(set)
集合所有元素之和 : sum(set)
集合元素的个数 : len(set)
六、集合应用案例
问题:假设已有若干用户名字及其喜欢的电影清单,现有某用户,已看过并喜欢一些电影,现在想找个新电影看看,又不知道看什么好。
思路:根据已有数据,查找与该用户爱好最相似的用户,也就是看过并喜欢的电影与该用户最接近,然后从那个用户喜欢的电影中选取一个当前用户还没看过的电影,进行推荐。
# 待测用户曾经看过并感觉不错的电影
user = {'film1', 'film2', 'film3'}
历史数据:
user0:{'film9', 'film3', 'film6', 'film7', 'film5', 'film1'}
user1:{'film1'}
user2:{'film7', 'film9', 'film6', 'film2', 'film3' 'film4'}
user3:{'film3', 'film5', 'film9', 'film4'}
user4:{'film8', 'film3', 'film6', 'film2', 'film7', 'film1', 'film4'}
user5:{'film2', 'film3', 'film8', 'film4'}
user6:{'film8', 'film9', 'film6', 'film3', 'film1', 'film5'}
user7:{'film5'}
user8:{'film9', 'film3', 'film6', 'film7', 'film1', 'film4'}
user9:{'film8', 'film9', 'film6', 'film2', 'film3', 'film1', 'film4'}
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'}
# 查找与待测用户最相似的用户和Ta喜欢看的电影
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)
七、嵌套组合数据
列表
元组
字典
集合
类型名称
list
tuple
dict
set
定界符
方括号[]
圆括号()
大括号{}
大括号{}
是否可变
是
否
是
是
是否有序
是
是
否
否
是否支持下标
是(使用序号作为下标)
是(使用序号作为下标)
是(使用“键”作为下标)
否
元素查找速度
非常慢
很慢
非常快
非常快
新增和删除元素速度
尾部操作快 其他位置慢
不允许
快
快
创建和访问嵌套列表
>>> list = [[1,0,0],[0,1,0],[0,0,1]] #单位嵌套列表.
>>> print("list:",list)
list: [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> list3 = [7,8,9]
>>> list = [list1,list2,list3] #多个列表组成嵌套列表.
>>> print("list:",list)
list: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> print("list[1]:",list[1])
list[1]: [4, 5, 6]
>>> print("list[1][1]:",list[1][1])
list[1][1]: 5
创建和遍历嵌套字典
nobel_prize_dict = {
"物理学家":["伦琴","爱因斯坦","波尔"],
"化学家":["欧内斯特·卢瑟福", "范特霍夫","玛丽·居里"],
"医学家":["埃米尔·阿道夫·冯·贝林","罗伯特·科赫","屠呦呦"]
}
#遍历嵌套字典.
for key,value in nobel_prize_dict.items():
print("获得诺贝尔奖的" + str(key) + ":",end = ' ')
for item in value:
print(item,end = ', ')
print()