zoukankan      html  css  js  c++  java
  • 07_python_集合深浅拷贝

    一、join

     1 li = ["李嘉诚", "麻花藤", "林海峰", "刘嘉玲"]
     2 s = "_".join(li)   # 循环遍历列表,把列表中的每一项用''_''拼接
     3 print(s)
     4 结果:
     5 李嘉诚_麻花藤_林海峰_刘嘉玲
     6 li = "花闺"
     7 s = "_".join(li)
     8 print(s)
     9 结果:
    10 花_闺
      1、join()方法是把列表转换成字符串,join就是迭代。
        字符串  =>  列表        s.split()             列表  =>  字符串          '_' . join( li )
      2、删除列表中的元素,删除字典也同样方法
        循环删除列表中的元素会出现删不干净的问题
    1 li = [11, 22, 33, 44]
    2 for e in li:             # for 循环内部存在一个变量来记录当前被访问循环的位置索引,每次删除都会涉及元素移动
    3  li.remove(e)
    4 print(li)
    5 结果:
    6 [22, 44]

      由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要再循环中直接去删 除元素. 可以把要删除的元素添加到另⼀个集合中然后再批量删除.

    1 li = [11, 22, 33, 44]
    2 li_new = []
    3 for el in li:
    4     li_new.append(el)
    5 for i in li_new:
    6     li.remove(i)
    7 print(li)

      字典删除元素

    1 dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'}
    2 dic_del_list = []
    3 # 删除key中带有'k'的元素
    4 for k in dic:
    5  if 'k' in k:
    6  dic_del_list.append(k)
    7 for el in dic_del_list:
    8  del dic[el]
    9 print(dic)

    二、fromkeys()

    1 dic = dict.fromkeys(["jay", "JJ"], ["周杰伦", "麻花藤"])
    2 print(dic)
    3 结果:
    4 {'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}

      fromkeys()不是改变字典,它是一个类方法,作用是创建新字典前⾯列表中的每⼀项都会作为key, 后⾯列表中的内容作为value. ⽣成新dict,fromkeys正常来说应该是类名访问的

    1 d = dict.fromkeys(['a','b'],[])
    2 d['a'].append('alex')
    3 结果:
    4 {‘a’:['alex'], 'b':['alex']}
    5 # 所有key用的是同一个列表,改变其中一个,另一个也跟着改变         

    三、集合 set()

      1、set集合是python的⼀个基本数据类型. ⼀般不是很常⽤. set中的元素是不重复的.⽆序的.⾥ ⾯的元素必须是可hash的(int, str, tuple,bool), 我们可以这样来记. set就是dict类型的数据但 是不保存value, 只保存key. set也⽤{}表⽰
      注意: set集合中的元素必须是可hash的, 但是set本⾝是不可hash得. set是可变的. 
      2、字典中key不会重复。集合中存的如字典中key类似
        s = set( ) # 空集合
        s = {1,2,3} # set集合
      3、集合的特点:不重复,元素不可变(可hash)
      4、去重
    1 li = [1,2,3,1,1,1,1,2,2,2,4,4,4,5,5,5,5]
    2 se = set(li)
    3 li_new = list(se)
    4 print(li_new)

    四、深浅拷贝

      1、定义
     
      (1) 赋值没有创建新对象。多个变量共享同一个对象
     

     

      (2)浅拷贝。 会创建新对象。 新的对象中里面的内容不会被拷贝
     

     

     
      (3)深拷贝。 创建一个一摸一样的完全新的对象。 这个对象延伸出来的内容也会跟着复制一份
     

     

  • 相关阅读:
    Java后端面试题大汇总,冲刺金三银四
    面试官:小伙子,Mybatis的本质和原理说一下
    面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?
    便捷搭建 Zookeeper 服务器的方法,好用,收藏~
    10 个冷门但又非常实用的 Docker 使用技巧
    mitmproxy 抓包工具(1)
    基于alpine创建Scrapy镜像
    强大的输入框-应用快速启动uTools
    Interceptor、Filter、Servlet的区别
    利用三层判断sql数据库中编码是否已经存在(个人拙作,不喜勿喷)
  • 原文地址:https://www.cnblogs.com/hq82/p/9629692.html
Copyright © 2011-2022 走看看