• 2018.8.3 python中的set集合及深浅拷贝


    一、字符串和列表的相互转化

    之前写到想把xx类型的数据转化成yy类型的数据,直接yy(xx)就可以了,但是字符串和列表的转化比较特殊,相互之间的转化要通过join()和split()来实现。

    例如:

    列表转化成字符串:

    lst = ['高新华','刘清扬','翠云彰']
    s = '**'.join(lst)
    print(s)  #高新华**刘清扬**翠云彰

    字符串转化成列表:

    ss = '高新华**刘清扬**崔元章'
    s =ss.split('**')
    print(s)                           #['高新华', '刘清扬', '崔元章']

     当join(字符串)时就会进行迭代:

    s = "_".join("马化腾")
    print(s)                 #马_化_腾

     二、列表和字典都不能在循环的时候进行删除

    由于删除元素会导致元素索引的改变,所以容易出现问题,尽量不要在循环中直接删去元素,可以把要删除的元素添加到一个新的列表中然后在批量删除。

    lst = ['张国荣','张铁林','张国立','张曼玉','汪峰']
    zhangs = []
    for el in lst:
        if el.startswith(''):
            zhangs.append(el)
    for el in zhangs:
        lst.remove(el)
    print(lst)
    print(zhangs)
    dic = {'提莫':'冯提莫','发姐':'陈一发儿','55开':'卢本伟'}
    lst = []
    for k in dic:
        lst.append(k)
    for el in lst:
        dic.pop(el)
    print(dic)

    三、dict中的fromkeys()可以帮我们通过list创建一个新的dict

    dic = {'apple':'苹果','banana':'香蕉'}
    ret = dic.fromkeys('orange','橘子')#直接用字典去访问fromkeys,不会对原字典产生影响
    # {'o': '橘子', 'r': '橘子', 'a': '橘子', 'n': '橘子', 'g': '橘子', 'e': '橘子'}
    ret = dict.fromkeys('abc',['哈哈','呵呵','吼吼'])
    #{'a': ['哈哈', '呵呵', '吼吼'], 'b': ['哈哈', '呵呵', '吼吼'], 'c': ['哈哈', '呵呵', '吼吼']}
    print(ret)

    四、set集合

    集合中的元素必须是可哈希(int,str,bool,tuple)的,不重复的,里面的元素是无序的,而集合本身是不可哈希的(可使用frozenset)。

    集合可以进行增删改查,其重要功能是去重。

    s = {"周杰伦", "的老婆","叫昆凌", (1,2,3), "周杰伦"}
    print(s)#{"周杰伦", "的老婆","叫昆凌", (1,2,3)}

    五、深浅拷贝

    浅拷贝:只拷贝第一层内容   [:]     copy()

    st1 = ['金毛狮王','紫衫龙王','青翼蝠王','白眉鹰王',['张无忌','赵敏','周芷若']]
    lst2 = lst1[:]
    print(lst1)   #['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若']]
    print(lst2)   #['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若']]
    print(id(lst1[4]))  #34685640
    print(id(lst2[4]))  #34685640
    lst1 = ['金毛狮王','紫衫龙王','青翼蝠王','白眉鹰王',['张无忌','赵敏','周芷若']]
    lst2 = lst1[:]
    lst1[4].append('小昭')
    print(lst1)      #['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若', '小昭']]
    print(lst2)      #['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若', '小昭']]
    print(id(lst1[4]))  #34870984
    print(id(lst2[4]))   #34870984

    深拷贝:把这个对象内部的内容全部拷贝一份. 引入copy模块.      

    模式:

    import copy
    列表2 = copy.deepcopy(列表1)
    import copy
    lst1 = ['金毛狮王','紫衫龙王','青翼蝠王','白眉鹰王',['张无忌','赵敏','周芷若']]
    lst2 = copy.deepcopy(lst1)
    lst1[4].append('小昭')
    print(lst1)      #['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若', '小昭']]
    print(lst2)      #['金毛狮王', '紫衫龙王', '青翼蝠王', '白眉鹰王', ['张无忌', '赵敏', '周芷若']]
    print(id(lst1[4]))  #35929672
    print(id(lst2[4]))   #35984584
  • 相关阅读:
    kubesphere在应用商店安装rabbitmq注意事项
    js中两个感叹号的作用!!
    Mysql5.7 时间Datetime 索引不生效问题
    Electron NodeJS 订阅和消费RabbitMQ详细笔记
    QGraphicsItem QGraphicsObject 项目进行属性动画时候,需要注意。
    vcpkg默认x64版本
    联级查询 id 和 parentid 左外查询
    SQL server 获取表、视图字段属性
    SQL 异常捕获和事务回滚
    关联查询,两表关联逗号隔开查询
  • 原文地址:https://www.cnblogs.com/fengchong/p/9415926.html
Copyright © 2020-2023  润新知