来帮同学解答一个问题
章节
问答
课签
笔记
评论
占位
占位

Python 操作set的其他方法

不会报错的删除方法discard()

除了使用remove()方法删除元素以外,还可以使用discard()方法删除元素,并且,和remove()不同的是,当元素不存在时,使用discard()并不会引发错误,所以使用discard()是更加高效的一个方法。

name_set = set(['Jenny', 'Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl'])
name_set.discard('Jenny')
print(name_set) # ==> set(['Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl'])
name_set.discard('Jenny')
print(name_set) # ==> set(['Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl']

清除所有元素的方法clear()

和dict一样,set也提供了clear()方法,可以快速清除set中的所有元素。

name_set = set(['Jenny', 'Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl'])
print(name_set) # ==> set(['Jenny', 'Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl'])
name_set.clear()
print(name_set) # ==> set([])

集合的子集和超集

set提供方法判断两个set之间的关系,比如两个集合set,判断其中一个set是否为另外一个set的子集或者超集。

s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 判断s1是否为s2的子集
s1.issubset(s2) # ==> True
# 判断s2是否为s1的超集
s2.issuperset(s1) # ==> True

判断集合是否重合

有时候需要判断两个集合是否有重合的地方,如果使用传统的方法,需要使用for循环一个一个的去判断,非常麻烦,set提供isdisjoint()方法,可以快速判断两个集合是否有重合,如果有重合,返回False,否则返回True。

s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
s1.isdisjoint(s2) # ==> False,因为有重复元素1、2、3、4、5

任务

已知两个集合s1、s2,请判断两个集合是否有重合,如果有,请把重合的元素打印出来。

s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
?不会了怎么办

参考答案:

s1 = set([1, 2, 3, 4, 6, 8, 10])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
flag = s1.isdisjoint(s2)
if not flag:
    for item in s1:
        if item not in s2:
            continue
        print(item)
||
1
2
# Enter a code
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最新回答 / Pusheng_tDHINZ
自己定义的

已采纳回答 / 月落见晨曦
可以定义一个i=0,用作计数器,当s2中有这个数时,就+1,每次循环一轮后判断i即可你这种做法,当然也可以

最新回答 / qq_慕勒7424300
题目中 s1.isdisjoint(s2) 是个布尔值,然后 not False = True,not True = False

最赞回答 / 上善o若水
严谨,如果不没有重合就不用执行下面的代码了

最赞回答 / qq_慕函数1463992
s1 = set([1,10]) 2个值也就是 for a in s1:  循环2次了。一次if a in s2:        print(a)一次else:        print('none')

最新回答 / weixin_慕少4178098
我运行了一下,没啥大问题,最后的输出报错了,改成none就没问题了,能正常运行

最新回答 / weixin_慕函数3435348
就是高中数学集合的意思,谁包含谁的意思。

最新回答 / 慕沐7221243
not的意思是反义,比如原意是true,前面加not就变成false了

最新回答 / wuzhou
改成 if not s1.isdisjoint(s2):set提供isdisjoint()方法,可以快速判断两个集合是否有重合,如果有重合,返回False,否则返回True

已采纳回答 / weibo_Gavin_0
代码头增加# coding=utf-8  或者去掉中文试试

已采纳回答 / 小颖April
因为有重合返回false,所以flag的值为假,not flag就为真,所以if not flag就是为了进入这个条件判断,接下来的操作就是打印重复元素了

最赞回答 / 慕哥7520997
输出结果没有区别,但是如果当两个集合没有重复元素时,你先用isdisjoint(s2)判重,如果不重复,就不会进入for循环,而是程序直接结束,如果不提前判重,则无论什么情况都会进入循环

已采纳回答 / 耿雨1426068
你把" "去掉  a应该是布尔值 这样判断

最赞回答 / 慕神7009732
s1 = set([1, 2, 3, 4, 5])s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])s3=set()s4=set()print(s1.isdisjoint(s2))a=Falseif s1.isdisjoint(s2)==a:    s3=s2-s1    L=list(s3)    T=tuple(s3)    print(L,T)else:    print(s4)a=False 不要带引号,带了引号是表示字符串,不是布尔类型,所以不成立
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言