python集合为什么不能用下标运算_Python的Set操作,python,集合

一、集合创建

集合(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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值