Python学习心得第三周-01 集合

#作用:去重,关系运算,

#定义:
            知识点回顾
            可变类型是不可hash类型
            不可变类型是可hash类型

#定义集合:
            集合:可以包含多个元素,用逗号分割,
            集合的元素遵循三个原则:
             1:每个元素必须是不可变类型(可hash,可作为字典的key)
             2:没有重复的元素
             3:无序

!!!注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值

#优先掌握的操作:

#1、集合的定义以及3个注意点

#2、集合的关系运算

#3、len,in not in

#4、for循环遍历集合

#需要掌握:(*****)

#1、集合的去重以及局限性

#2、往集合内添加或删除元素,add,update,pop,remove,discard

pythoners=['alexdsb','egon','lxxdsb','oldboy','吴三江','张铁蛋']
linuxers=['张刚蛋','李铜弹','赵银蛋','alexdsb','oldboy','李蛋蛋']


l=[]
for item in pythoners:
    if item in linuxers:
        l.append(item)

print(l)

  

# 集合类型:
#作用:
#1、去重
#2、关系运算

# 定义:逗号分隔开多个元素
# 注意:
# 1、每一个元素都必须是不可变类型
# 2、集合内元素不能重复
# 3、集合内元素无序
s={1,2,1,1,1,1,1,1,1} #s=set({1,2})
print(type(s))
print(s)

s=set('hello') #{}
print(s)

  

#1、|合集
#2、&交集
#3、-差集
#4、^对称差集
#5、==
#6、父集:>,>=
#7、子集:<,<=

#1、关系运算
pythoners={'alexdsb','egon','lxxdsb','oldboy','吴三江','张铁蛋'}
linuxers={'张刚蛋','李铜弹','赵银蛋','alexdsb','oldboy','李蛋蛋'}

#1.1、求既报名linux又包名python的学员有哪些=》即求两个集合体的共同部分,称之为交集
print(pythoners & linuxers)
print(pythoners.intersection(linuxers))

#1.2、求只报名python,没有报名linux的学员有哪些=》即集合pythoners减去linuxers,称之为差集
print(pythoners - linuxers)
print(pythoners.difference(linuxers))

#1.3、求只报名linux,没有报名python的学员有哪些
print(linuxers - pythoners)
print(linuxers.difference(pythoners))

#1.4 求老男孩所有报名的学生姓名->即求两个集合体的总和,称之为并集
print(pythoners | linuxers)
print(pythoners.union(linuxers))

#1.5 求没有同时报名两门课程的学生姓名->称之为对称差集
print(pythoners ^ linuxers)
print(pythoners.symmetric_difference(linuxers))

#1.6 ==
s1={1,2,3}
s2={3,2,1}
print(s1 == s2)

# 注意:只有在两个集合存在包含与被包含的关系时才可以进行大小的比较
#1.7、父集:>,>=
s1={1,2,3}
s2={1,2}
print(s1 > s2) # s1是s2的父集
print(s1 >= s2) # s1是s2的父集

print(s1.issuperset(s2)) #s1 >= s2

s3={1,2,3}
s4={3,4,5,6}

print(s4 >= s3)
#1.8、子集:<,<=
print(s2.issubset(s1)) #s2 <= s1


print(len({1,2,3}))
print(1 in {1,2,3})

# 集合其他的内置方法
s1={1,2,3,4,5}
print(id(s1))
s1.add(6)
print(s1)
print(id(s1))

s2={3,4}
s1.difference_update(s2) ## s1=s1.difference(s2) #s1=s1 - s2
print(s1)

s3={6,7}
print(s1.isdisjoint(s3))

#  删除
print(s1.pop()) # 随机删除
s1.discard(333333) # 指定元素删除,,如果元素不存在也不报错
s1.remove(3333) # 指定元素删除,如果元素不存在则报错
print(s1)

s1={1,2,3,4,5}
s1.update({3,4,5,6,7})
s1.update('hello')
print(s1)

  

#去重
#局限性:
#1、不能保证原来的顺序
#2、不能针对可变类型去重
l=[1,1,1,1,'egon','alex','egon',{'x':1}]
s=set(l) #{1,'egon','alex'}
print(s)

l=list(s) #[]
print(l)


# 需求:
#1、列表内的元素有可变类型
#2、去重之后要保持原来顺序
info=[
    {'name':'egon','age':18},
    {'name':'alex','age':73},
    {'name':'egon','age':18},
    {'name': 'lxx', 'age': 19},
    {'name':'egon','age':18},
    {'name':'lxx','age':19},
]

l=[]
for dic in info:
    if dic not in l:
        l.append(dic)

info=l
print(info)

# 循环
s={'egon','alex','wxx','lxx'}
for item in s:
    print(item)

  



原文地址:https://www.cnblogs.com/zhutiancheng/p/9316534.html