python的集合类型

pythoners=['王大炮','李二丫','陈独秀','艾里克斯','wxx','欧德博爱']
linuxers=['陈独秀','wxx','egon','张全蛋']

l1=[]
for stu in pythoners:
    if stu in linuxers:
        # print(stu)
        l1.append(stu)#求出两个列表里面相同的值

print(l1)

l2=[]
for stu in pythoners:
    if stu not in linuxers:
        # print(stu)
        l2.append(stu)

print(l2)   #求出pythoners中除去与linuxers相同的值



一:基本使用
1 用途: 关系运算、去重

2 定义方式:{}内用逗号分隔开多个元素,每一个元素都必须是不可变(即可hash)类型
强调:
2.1 集合内元素都必须是不可变(即可hash)类型
2.2 集合内的元素无序
2.3 集合内的元素不能重复

s={1,2,'a'} #s=set({1,2,'a'})
print(type(s))

s={1.1,1,'aa',(1,2,3),{'a':1}}

s={1,'a','hello',(1,2,3),4}
for item in s:
    print(item)

s={1,1,1,1,1,1,1,1,1,'a','b','a'}
s={(1,2,3),(1,2,3),'a','b','a'}
print(s)

s=set('hello')
print(s)

单纯的用集合去重,需要注意的问题是
1、去重的目标所包含的值必须都为不可变类型
2、去重的结果会打乱原来的顺序
names=['asb','asb','asb','wsb','wsb','egon_nb',[1,2,3]]
s=set(names)

names=list(s)
print(names)


3 常用操作+内置的方法
优先掌握的操作:
1、长度len
pythoners={'王大炮','李二丫','陈独秀','艾里克斯','wxx','欧德博爱'}
print(len(pythoners))

2、成员运算in和not in
print('李二丫' in pythoners)


pythoners={'王大炮','李二丫','陈独秀','艾里克斯','wxx','欧德博爱'}
linuxers={'陈独秀','wxx','egon','张全蛋'}
3、|并集
print(pythoners | linuxers)
print(pythoners.union(linuxers))#输出两个集合内所有的值

4、&交集
print(pythoners & linuxers)
print(pythoners.intersection(linuxers))
print(linuxers & pythoners)   #两个集合内相同的值
5、-差集
print(pythoners - linuxers)
print(pythoners.difference(linuxers))
print(linuxers - pythoners)
print(linuxers.difference(pythoners))  #第一个集合所有值减去两个集合相同的值
6、^对称差集
print(pythoners ^ linuxers)
print(pythoners.symmetric_difference(linuxers))  #两个集合所有的值去除两个集合内相同的值

print(linuxers ^ pythoners)
7、==
s1={1,2,3}
s2={1,2,3}
print(s1 == s2)       #两个集合所有的值相同

8、父集(包含关系):>,>=
s1={1,2,3,4,5}
s2={1,2,3}
print(s1 > s2) # s1包含s2
print(s1.issuperset(s2))
print(s2.issubset(s1))

s3={1,2,10}
print(s1 > s3)    #不能比较

s1={1,2,3,4,5}
s2={1,2,3,4,5}
print(s1 >= s2)   #只要大于的等于一个成立就满足

9、子集(被包含的关系):<,<=

s1={1,2,3,4,5}
s1.add(6)
print(s1)   #加一个值

s1.update({4,7,8,9})
print(s1)     #加入没有的值,重复的不添加

res=s1.pop()
print(res)     #随便删除一个值

res=s1.remove(4)
print(res)
print(s1)    #删除直接加上值,单纯删除

s1={1,2,3,4,5}
s2={2,3,7,8}
s1=s1 - s2
print(s1)
s1.difference_update(s2) # s1=s1 - s2
print(s1)    #{1, 4, 5}

s1={1,2,3,4,5}
s1.pop()
s1.remove(7)
s1.discard(7) # 即便要删除的元素不存在也不会报错


s1={1,2,3,4,5}
s2={6,7,8}
print(s1.isdisjoint(s2))#判断两个没有交集则为True




#二:该类型总结
1 存一个值or存多个值
    可以存多个值,值都必须为不可变类型

2 有序or无序
无序

3 可变or不可变
set集合是可变类型
s={1,2,3}
print(id(s))
s.add(4)
print(s)
print(id(s))



=====================集合的去重==========================
单纯的用集合去重,需要注意的问题是
1、去重的目标所包含的值必须都为不可变类型
2、去重的结果会打乱原来的顺序
names=['asb','asb','asb','wsb','wsb','egon_nb',[1,2,3]]
s=set(names)

names=list(s)
print(names)#转换类型

stu_info=[
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'alex','age':73,'sex':'male'},
    {'name':'oldboy','age':84,'sex':'female'},
]

new_info=[]
for info in stu_info:
    if info not in new_info:
        new_info.append(info)

print(new_info)#不改变顺序的情况下去重
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值