python数据类型(3)

七 集合 

# 作用:去重,关系运算,
#定义:
            可变类型是不可hash类型
            不可变类型是可hash类型

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

    names=['asb','asb','asb','wsb','wsb','egon_nb',[1,2,3]]
    s=set(names)
    print(s)
    列表为可变类型,会出错

注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
##练习##
    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、去重的结果会打乱原来的顺序
 
3.常用操作和内置方法
#优先掌握的操作:
#1、长度len
#2、成员运算in和not in
#3、|合集(union)
    print(pythoners | linuxers)
    print(pythoners.union(linuxers))
#4、&交集(inteersection)
    print(pythoners & linuxers)
    print(pythoners.intersection(linuxers))
#5、-差集(difference)
    print(pythoners - linuxers)
    print(pythoners.difference(linuxers))
    print(linuxers - pythoners)
#6、^对称差集(symmetric)
    print(pythoners ^ linuxers)
    print(pythoners.symmetric_difference(linuxers))
#7、==
#8、父集:>,>= (issuperset)
    s1={1,2,3,4,5}
    s2={1,2,3}
    print(s1 > s2) # s1包含s2
    print(s1.issuperset(s2))
    print(s2.issubset(s1))
#9、子集:<,<=  (issubset)  
         

4.补充操作

(1)更新

        s1={1,2,3,4,5}

        s1.update({4,7,8,9})

        print(s1)


        s1={1,2,3,4,5}

        s2={2,3,7,8}

        s1.difference_update(s2) # s1=s1 - s2

        print(s1)

(2)pop随机删除

        print(s1.pop())

(3)删除元素remove

        s1={1,2,3,4,5}

        s1.pop()

        s1.remove(7)#删除元素不存在报错

        s1.discard(7) # 即便要删除的元素不存在也不会报错

(4)isdisjoin无交集返回True

        s1={1,2,3,4,5}

        s2={6,7,8}

        print(s1.isdisjoint(s2))

                              

 # #二:该类型总结

# 1 存一个值or存多个值

#     可以存多个值,值都必须为不可变类型

#

# 2 有序or无序

# 无序

#

# 3 可变or不可变

# set集合是可变类型

# s={1,2,3}

# print(id(s))

# s.add(4)

# print(s)

# print(id(s))      

练习

  一.关系运算
  有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  linuxs={'wupeiqi','oldboy','gangdan'}
  1. 求出即报名python又报名linux课程的学员名字集合
  2. 求出所有报名的学生名字集合
  3. 求出只报名python课程的学员名字
  4. 求出没有同时这两门课程的学员名字集合
 
 
print(pythons & linuxs)
print(pythons | linuxs)
print(pythons - linuxs)
print(pythons ^ linuxs)

  二、去重
            # 单纯的用集合去重,需要注意的问题是
            #1、去重的目标所包含的值必须都为不可变类型
            #2、去重的结果会打乱原来的顺序

   1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序

   2.在上题的基础上,保存列表原来的顺序

   3.去除文件中重复的行,肯定要保持文件内容的顺序不变
   4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序

l=[
    {'name':'egon','age':18,'sex':'male'},
    {'name':'alex','age':73,'sex':'male'},
    {'name':'egon','age':20,'sex':'female'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
]  
new_info=[]
for info in stu_info:
    if info not in new_info:
        new_info.append(info)
print(new_info)

八 数据类型总结

按存储空间的占用分(从低到高)

数字
字符串
集合:无序,即无序存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

按存值个数区分

标量/原子类型数字,字符串
容器类型列表,元组,字典

 

 

按可变不可变区分

可变列表,字典
不可变数字,字符串,元组

 

 

按访问顺序区分

直接访问数字
顺序访问(序列类型)字符串,列表,元组
key值访问(映射类型)字典

 

 

  



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值