day07 python
 
一.知识点补充
    1."".join()
s = "".join(('1','2','3','4','5'))  #将字符串类型的可迭代的类型的每个元素按""引号中的东西拼接成字符串
print(s)
    
    2.list 的for循环删元素的问题
lst = [1,2,3,4]
 
for i in lst:
    lst.remove(i)
print(lst)
>>>[2, 4]            #剩两个元素, 是因为有个变量来记录当前循环的位置, 
    
    如何解决
lst = [1,2,3,4]
lst1 = lst[:]       #循环新列表, 取出来的元素用来删老列表
 
for i in lst1:
    lst.remove(i)
print(lst)
  
    3.dict 在for 循环时不能改变大小, 但可以改value的值
dic = {1:1,2:2,3:3,4:4,5:5}
 
for i in dic:
    dic.pop(i)
 
print(dic)
>>>RuntimeError: dictionary changed size during iteration    #运行时错误, 不能删除, 也不能增加
    
    如何解决
dic = {1:1,2:2,3:3,4:4,5:5}
lst=[]
 
for i in dic:
    lst.append(i)
 
for i in lst:
    dic.pop(i)
 
print(dic)            #与列表一样, 循环新的, 删老的
  
    4.{}.fromkeys()
dic = {1:1,2:2,3:3,4:4,5:5}
 
ret = dic.fromkeys('bajie', 'datang')   #返回新的字典, 和原来的字典没有关系
 
ret1 = dict.fromkeys('abc', '666')      #直接使用类名进行访问
 
print(dic)
>>>{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}
print(ret)
>>>{'b': 'datang', 'a': 'datang', 'j': 'datang', 'i': 'datang', 'e': 'datang'}
print(ret1)
>>>{'a': '666', 'b': '666', 'c': '666'}
    
    里面的列表是共享的
lst = [1,2,3,4,5]
ret = dict.fromkeys('abc', lst)
lst.append(6)
 
print(ret)
>>>{'a': [1, 2, 3, 4, 5, 6], 'b': [1, 2, 3, 4, 5, 6], 'c': [1, 2, 3, 4, 5, 6]}    #所有人用的是同一个列表(判断是不是一个内存地址)
 
二.集合
 
    1.set() , 不重复, 无序的, 里面的元素必须是可哈希的(不可变): 就是没有value的字典, 也用{}表示: 集合本身是可变的, 不可哈希
lst = [1,2,2,3,4,5,6,45,345,3,2,3,2,3,23,4,432,342,4]
lst = list(set(lst))
print(lst)      #去重用集合, 很好用
    2.增删改查(了解:用的时候回来看)
 
        增
s = {1,2,3,4,5,6}
s.add()    #增加一个元素
s.update('bajie')   #迭代增加
print(s)
        删  
print(s.pop())      #随机弹出一个, 有返回值, 返回被弹出的元素
print(s)
 
s.remove(1)     #删一个元素
 
s.clear()       #清空
        改
s.remove(2)     #先删掉
s.add(6)        #再添加
        查
for i in s:     #可用 for 循环
    print(i)
    
    3.集合的其他操作
        交集
s1 = {1,2,3}
s2 = {2,3,4}
 
print(s1 & s2)
print(s1.intersection(s2))
        并集
print(s1 | s2)
print(s1.union(s2))
        差集
print(s1 - s2)
print(s1.difference(s2))    #得到第一个中单独存在的
        反交集
print(s1 ^ s2)
print(s1.symmetric_difference(s2))    #两个集合单独存在的数据
        子集
print(s1 < s2)
print(s1.issubset(s2))
        超集
print(s1 > s2)
print(s1.issubset(s2))
 
  
    4.frozenset() 是不可变的集合, 是可哈希的
 
    5.哈希算法: 只要得到的结果是数字, 就认为是哈希算法
 
三.深浅拷贝
    1.赋值拷贝:内存地址都相同
lst1 = [1,2,3,4,5,6]
lst2 = lst1                     #赋值操作时, 内存的地址相同(有嵌套时, 第二层内存地址也相同)
lst1.append(7)
print(id(lst1),id(lst2))
    
    2.浅拷贝:第一层内存地址相同, 第二层不同
lst2 = lst1[:]                  #浅拷贝,方式一
print(id(lst1),id(lst2))        #用切片取出来再赋值操作时, 内存地址就变了
 
lst2 = lst1.copy()              #浅拷贝,方式二
print(id(lst1),id(lst2))        #内存地址不一样
 
lst1 = [1,2,3,4,5,6,[1,2,3,4,5,6]]      #浅拷贝, 当有嵌套时, 只有第一层拷贝了, 第二层还是共用数据
lst2 = lst1.copy()
print(id(lst1[6]))                      #第二层嵌套的内存地址相同
print(id(lst2[6]))
    
    3.深拷贝:第一层和第二层内存地址都不同
import copy
 
lst2 = copy.deepcopy(lst1)          #深拷贝, 当有嵌套时, 所有层次都会拷贝
print(id(lst1[6]))                  #第二层嵌套的内存地址也变了
print(id(lst2[6]))
 
  
练习
 
cars = ['京A34567','冀R44566', '京A55899','冀R44566','冀R44566']
locals = {'京':'北京','冀':'河北省'}
rst = {}
 
for i in cars:
    location  = locals[i[0]]
    if not rst.get(location):
        rst[location] = 1
    else:
        rst[location] += 1
print(rst)
 
>>>{'北京': 2, '河北省': 3}
 
 
 
 
 
 

day07 python列表 集合 深浅拷贝的更多相关文章

  1. day8 python学习 集合 深浅拷贝

    1.内存地址: 字符串在20位以内,没有空格,没有特殊字符的情况下,同样的字符串内存地址是一样的 2.元组中:在只有一个值的时在后边加逗号和没有逗号的区别 t1=(1) 不加逗号这个值是什么类型就打印 ...

  2. python学习打卡 day07 set集合,深浅拷贝以及部分知识点补充

    本节的主要内容: 基础数据类型补充 set集合 深浅拷贝 主要内容: 一.基础数据类型补充 字符串: li = ["李嘉诚", "麻花藤", "⻩海峰 ...

  3. 6.Python初窥门径(小数据池,集合,深浅拷贝)

    Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...

  4. join,列表和字典用for循环的删除,集合,深浅拷贝

    1.join() 将列表转换成字符串,并且每个字符之间用另一个字符连接起来,join后面必须是可迭代的对象(字符串,列表,元组,字典,集合),数字不能迭代 例如: s = ['a','b','c'] ...

  5. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

  6. 第五篇python进阶之深浅拷贝

    目录 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 二.拷贝(只针对可变数据类型) 三.浅拷贝 四.深拷贝 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 id不 ...

  7. 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝

    Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...

  8. Python 中的深浅拷贝

    Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...

  9. Python学习---列表/元组/字典/字符串/set集合/深浅拷贝1207【all】

    1.列表 2.元组 3.字典 4.字符串 5.set集合 6.深浅拷贝

随机推荐

  1. Ansible--01 ansible基础 Ansible-ad- hoc

    目录 自动化运维工具-Ansible基础 自动化运维的含义 Ansible 基础及安装 Ansible的架构 Ansible的执行流程 ansible配置文件 ansible Inventory(主机 ...

  2. 使用python开启你的opencv之旅---图像的读入,存储

    python的便捷是如此的引人着迷,而opencv给python提供的接口使我们能够使用python来快速验证我们的想法,或者与别的模块快速结合,在这个系列文章我会通过jupyter notebook ...

  3. opengl 库glew

    OpenGL OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库.OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL.IRIS GL是一个工业标准的3D图形软件 ...

  4. kvm学习笔记(一,基础概念)

    前言 阿里云的云主机,采用的kvm,今天就花了点时间研究了下. 一.安装 官方文档参考:http://www.linux-kvm.org/page/HOWTO 二.快速建立一个基于vnc的虚拟机安装 ...

  5. Mac上无法使用蓝牙时的7个修复程序

    蓝牙是一个很普遍的技术,除非它出现问题,你才会发现它.例如,你听歌很顺利时,直到AirPods突然断连.大多数时候,这是一个相对容易的修复,但有时可能会有些棘手. https://www.macdow ...

  6. hdu 4705 Y (树形dp)

    Description Input 4 1 2 1 3 1 4 题目的意思是给你一棵树,让你找到所有不在一条路径上的三个点的情况个数.乍一看正向处理比较麻烦,我们从反方向考虑,如果是取在一条路径上的3 ...

  7. [CSP-S模拟测试]:夜鹰与玫瑰(数学)

    题目描述 红晕爬上了白玫瑰的花瓣,花刺还没有到达夜莺的心脏,玫瑰的心依旧苍白如终年不化的积雪.由生命铸就的玫瑰不允许存在一丝一毫的瑕疵,假设玫瑰的一片花瓣可以抽象成一个点,一朵玫瑰我们用一个$N\ti ...

  8. 整合SSH

    Hibernate知识: 1.核心配置文件: 连接数据库信息.连接池配置 映射配置 Struts2: 1.相关操作: 创建方式: 写一个类,写上public String execute():方法 实 ...

  9. MyBatis简介与配置

    1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获.MyBatis 只使用简单的XM ...

  10. CSS 随记

    伪类选择符的顺序:L-V-H-A CSS提供了四种元素设置链接的颜色,包括:link.:visited.:hover.:active,它们的声明是有一定顺序的,我们简称这种顺序为L-V-H-A,即li ...