zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    动态表单之数据分页
    SQL Server 批量生成bcp命令
    SQL Server 全文索引的硬伤
    简单实用SQL脚本Part2:日期和时间函数
    使用SQL Server 扩展函数进行性能优化
    留念2010年5月5日
    C#获取URL参数值
    SQL Server扩展函数的基本概念
    SQL Server 空间换时间的数据库设计
    简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录
  • 原文地址:https://www.cnblogs.com/fengchong/p/9415926.html
Copyright © 2011-2022 走看看