• python学习之数据类型(set)


    3.9 集合(set)

    3.9.1 介绍

    ​ 集合是一个无序且不重复的元素集合。元素必须是可哈希的(int,str,tuple,bool)。可以把它看作是dic的key的集合。用{}表示。

    注意: set集合中的元素必须是可hash的, 但是set本身是不可hash得,set是可变的。

    set1 = {11,22,33,'hahah',[11,22,33]} #报错,含有列表
    set2 = {11,22,{33:44}} #报错,含有字典
    set3 = {11,22,(111,[222,333])} #报错,含有列表
    

    注意到没有,元素的元素也必须是可哈希的。

    set的特性,让它在除重的应用中使用方便。

    一行代码给列表去重

    lst = [11,22,33,'hah','a','hah',22,33,11]
    lst = list(set(lst))  #把lst转换成集合再转换成列表
    print(lst)
    ##输出
    [33, 11, 'hah', 'a', 22]
    

    3.9.2 集合的操作

    1.增加

    .add()

    语法:set.add(元素)一次只能增加一个元素,添加前set先进行查询操作,如果元素已存在,add将不会把该元素添加到set中。

    set = {'德玛西亚','皇子','赵信','女警'}
    set.add('李菁')
    set.add('易大师')
    set.add('慎')
    set.add('慎')
    print(set)
    #输出
    {'德玛西亚', '李菁', '皇子', '慎', '女警', '赵信', '易大师'}  #顺序是不定的,且重复的内容不会添加到set中
    

    .update()

    语法:set.update('abc') 迭代更新成'a' 'b' 'c'

    set.update(['abc']) 迭代更新成'abc'

    set = {'德玛西亚','皇子','赵信','女警'}
    set.update('剑豪')
    print(set)  #输出{'豪', '皇子', '女警', '剑', '赵信', '德玛西亚'}
    set.update(['剑豪'])
    print(set)  #输出{'皇子', '德玛西亚', '剑豪', '赵信', '女警'}
    
    2.删除

    .pop()随机弹出,返回弹出值,但是,不能指定删除某个元素

    .remove('元素') 删除特定值,不会返回删除值

    .clear() 清空

    .discard(''元素'') 如果删除的是set中的元素,则删除,否则,什么也不做.

    .del set 删除整个集合

    3.索引与替换

    ​ 因为set是无序的,不能使用索引进行操作,没有办法去定位⼀个元素,也就无法直接通过索引进行替换。

    ​ 如果要进行替换操作,只能先删除要替换的元素然后添加新的元素。

    4.查询

    ​ set 是一个可迭代对象,可以使用for循环输出元素。

    ​ set支持 x in set, len(set), for x in set

    ​ 作为一个无序的集合,sets不记录元素的位置和插入点

    5.常用操作
    操作符 方法 描述
    & .intersection() 交集
    | .union() 并集
    - .difference() 差集,得到第一个set的内容
    ^ .symmetric_difference() 反交集,对称差集;输出两个集合中单独存在的数据
    < .issubset(a < b) 子集,判断a是不是b的子集
    > .issuperset(a < b) 超集,判断a是不是b的超集
    se1 = {'德玛','皇子','赵信'}
    se2 = {'德玛','剑豪','女警'}
    print(se1 & se2)   #交集,输出{'德玛'}
    print(se1 | se2)   #并集,输出{'剑豪', '德玛', '皇子', '赵信', '女警'
    print(se1 - se2)   #差集,输出{'皇子', '赵信'}
    print(se1 ^ se2)   #反交集,输出{'女警', '赵信', '皇子', '剑豪'}
    se3 = {'德玛','皇子'}
    print(se3 < se1)   #子集,输出True
    print(se2 > se3 )  #超集,输出False
    
    6.frozenset()冻结集合

    ​ set集合本⾝是可以发生改变的,是不可hash的。我们可以使用frozenset来保存数据,frozenset是不可变的,也就是⼀个可哈希的数据类型,之后就可以把他转成dic的key来使用。

    ​ frozenset是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法。

    se1 = {'德玛','皇子','赵信'}
    print(type(se1))  #输出<class 'set'>
    se1 = frozenset(se1)
    print(type(se1))  #输出print(type(se1))
    dic = {se1:'123'}
    print(dic)
    
    
    仅供参考,欢迎指正
  • 相关阅读:
    怎样让jquery mobile 的footer/header 固定?
    smarty-smarty模板中类似for循环功能的实现代码
    mysql-MySql Update与case when
    PHP-获取用户所有定义的常量
    PHP-去掉php中var_dump()函数输出的省略号,让它完整显示0.0
    PHP--判断是否为时间戳
    Chrome/360极速/猎豹/枫树/浏览器去除视频网站广告利器插件——【切糕】广告视频屏蔽专家下载
    bootstrap使用modal动态对话框时,按回车键无法确认,反而取消对话框
    【bootstrap】常用bootstrap类库插件
    Thinkphp-开发技巧
  • 原文地址:https://www.cnblogs.com/jjzz1234/p/11010601.html
Copyright © 2020-2023  润新知