博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day07 深浅拷贝
阅读量:5171 次
发布时间:2019-06-13

本文共 2821 字,大约阅读时间需要 9 分钟。

今日主要内容

1. 基础数据部分的补充
  1. join: 把列表中的数据进行拼接。 拼接成字符串

lst = ["alex", "wusir", "ritian", "taibai"]s = '_'.join(lst) print(s)

 

  字符串转化成列表: split()
  列表转化成字符串:join()
  x->y类型 y(x)
  表示False的数据类型: False, 0, "", [], tuple(), dict(), set(), None.

 2. 关于删除:

  列表和字典在for循环的时候都不能删除。因为删除时,元素的索引会发生改变
  把要删除的内容保存在新列表中。 循环新列表。 删除老列表(字典)

lst = ["王大锤", "王有才", "张小白", "刘大哥"]for el in lst:    lst.remove(el) print(lst)#删除不彻底,  剩下['王有才', '刘大哥']new_lst = []   #装要删除的内容
for el in lst:    new_lst.append(el)#循环新列表的元素,对应找出原来列表的元素for el in new_lst:    lst.remove(el)  #根据新列表的元素,删除老列表的元素print(lst)
lst = ["王大锤", "王有才", "张小白", "刘大哥"]#删除姓王的new_lst = []for el in lst:    if el.startswith('王'):        new_lst.append(el)for el in new_lst:    lst.remove(el)print(lst)

  

dic = {
"jay":'周杰伦', "jj":"林俊杰 ", "jack": "莱昂纳多迪卡普里奥"}#清空字典lst = [] #建立新的列表,把需要删除的内容保存for k in dic: lst.append(k)for el in lst: dic.pop(el)print(dic)

 

  3. fromkeys

  dict.fromkeys(iterable, value)

  把可迭代对象进行迭代。 和后面的value组合成键值对 返回新字典

d = dict.fromkeys("周杰伦", "王尼玛")print(d){
'周': '王尼玛', '杰': '王尼玛', '伦': '王尼玛'}#第一项iterable ,共享value

 

  坑1: 返回新字典。不会改变原来的字典    fromkeys是一个staticmethod 静态方法

  dic = {}

  dic.fromkeys(xxx, xxx)
  print(dic)          # 结果是{}   

  d = dic.fromkeys(xxx, xxx) #这样创建的字典有内容

dic = {}# d = dic.fromkeys("周杰伦", "王尼玛")d = dict.fromkeys("周杰伦", "王尼玛")  #或者print(d)   # {'周': '王尼玛', '杰': '王尼玛', '伦': '王尼玛'}dict.fromkeys("周杰伦", "王尼玛")print(dic)  #{}

  坑2:    你的value如果是可变的数据类型。 所有的key都可以改动这个数据。 一个改动, 所有的value都跟着改变

  d = fromkeys(xxx.[])

  字典中的所有的value都是同一个列表

d = dict.fromkeys('周杰伦', ['哇哈哈'])print(d)#{'周': ['哇哈哈'], '杰': ['哇哈哈'], '伦': ['哇哈哈']}d['周'].append('爽歪歪')print(d)#{'周': ['哇哈哈', '爽歪歪'], '杰': ['哇哈哈', '爽歪歪'], '伦': ['哇哈哈', '爽歪歪']}

 

2. set集合

  特点:无序不重复。 内部元素必须可哈希(不可变数据类型)

  集合其实就是字典. 集合里面不存value , 集合中只存储key
  应用: 去重  (重点)  
lst = ["周杰伦", "周杰伦", "王力宏", "王力宏", "胡辣汤"]s = set(lst)print(s)   #去重  {'王力宏', '周杰伦', '胡辣汤'}print(list(s))  # 转换为列列表   可以不用重新赋值变量

  增删改查:

   1. add() 添加  重复内容不会被添加

   2.pop()  随机弹出一个

   3.remove()    指定元素删除  ,如果元素不存在  报错

   4.集合的数据没有索引  修改需要先删除后添加  即:先用.remove()   再.add()

   5.for 循环 查询 

  常用操作

    交集: s1.intersection(s2)  或者  s1 & s2

    并集:  s1.union(s2)  或者  s1 | s2

    差集:  s1.difference(s2)  或者  s1 - s2

    反交集:  s1.symmetric_difference(s2)   或者  s1 ^ s2

    子集: s1.issubset(s2)   或者 s1 <  s2

    超集: s1.issupperset(s2)   或者  s1 > s2

    

3. 深浅拷贝(画图理解)

  1. = 赋值操作没有创建新的对象。 此时 两个变量指向的是同一个内存地址

lst1 = ["孙悟空", "贝吉塔", "卡卡罗特"]lst2 = lst1 # 赋值lst1.append("短笛")print(lst1)  #['孙悟空', '贝吉塔', '卡卡罗特', '短笛']print(lst2)  #['孙悟空', '贝吉塔', '卡卡罗特', '短笛']print(id(lst1), id(lst2))   #1046493921032 1046493921032

 

  2. copy() 或者 [:] 浅拷贝。 拷贝第一层内容

 

  浅拷贝的问题
  # 优点: 省内存.
  # 缺点: 容易出现同一个对象被多个变量所引用

 

  3. 深拷贝

  import copy
  copy.deepcopy() 深度拷贝。 把对象内部的所有内容都拷贝一份

  深拷贝
  # 有点: 完全拷贝出一份两个对象之间除了数据相同。 没有任何关系
  # 缺点: 占内存

  作用: 快速创建对象

转载于:https://www.cnblogs.com/Knight-huang/p/9850831.html

你可能感兴趣的文章
easyui学习笔记5—panel加载其他的页面
查看>>
poj 2406 Power Strings(KMP)
查看>>
vi下的查找替换命令
查看>>
ubuntu系统无法ssh登录--安装openssh
查看>>
23andme、gsa、wegene各染色体位点统计
查看>>
【前台技术】-播放音频
查看>>
ElasticSearch High Level REST API【3】Scroll 滚屏
查看>>
关于STM32定时器使用的一个注意事项(以此为前车之鉴,重要!)
查看>>
Mybatis实现高级映射一对一、一对多查询
查看>>
JavaScript面向对象
查看>>
Codeforces Round #453 (Div. 1)
查看>>
[51单片机] 四相五线减速比为1/64步进电机驱动设计
查看>>
leetcode136只出现一次的数字
查看>>
docker tar 镜像 容器相互转换
查看>>
合成(Composite)模式
查看>>
.net EventHandler 事件处理
查看>>
[导入]2008李幼斌电视剧力作《我是太阳》全42集
查看>>
vs2013编译obs源码
查看>>
PHP 实现简单购物车功能(2)
查看>>
(9.19更新:八戒退款) 砸进七万块,没想到你是这样的猪八戒网
查看>>