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}
- day8 python学习 集合 深浅拷贝
1.内存地址: 字符串在20位以内,没有空格,没有特殊字符的情况下,同样的字符串内存地址是一样的 2.元组中:在只有一个值的时在后边加逗号和没有逗号的区别 t1=(1) 不加逗号这个值是什么类型就打印 ...
- python学习打卡 day07 set集合,深浅拷贝以及部分知识点补充
本节的主要内容: 基础数据类型补充 set集合 深浅拷贝 主要内容: 一.基础数据类型补充 字符串: li = ["李嘉诚", "麻花藤", "⻩海峰 ...
- 6.Python初窥门径(小数据池,集合,深浅拷贝)
Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...
- join,列表和字典用for循环的删除,集合,深浅拷贝
1.join() 将列表转换成字符串,并且每个字符之间用另一个字符连接起来,join后面必须是可迭代的对象(字符串,列表,元组,字典,集合),数字不能迭代 例如: s = ['a','b','c'] ...
- Python基础知识(六)------小数据池,集合,深浅拷贝
Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : 一个文 ...
- 第五篇python进阶之深浅拷贝
目录 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 二.拷贝(只针对可变数据类型) 三.浅拷贝 四.深拷贝 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 id不 ...
- 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝
Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...
- Python 中的深浅拷贝
Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...
- Python学习---列表/元组/字典/字符串/set集合/深浅拷贝1207【all】
1.列表 2.元组 3.字典 4.字符串 5.set集合 6.深浅拷贝
随机推荐
- 发布并开源自己的一款 基于.Net 4.0 及 netstandard2.0 的 ORM 框架
这款ORM框架的原版在经历过大概十几个项目的磨合,最近整理了一下,原名字为:ZhCun.Framework ,该框架辗转跟了我去过几家公司,大概从2012年出现第一个版本,当时就为简化数据库操作,从优 ...
- 十、设计模式之代理(Proxy)模式
什么是代理模式 代理模式是对象的结构模式,为其他对象提供一种对象以控制对这个对象的访问. 代理模式的结构图如下:(源自大话设计模式) Subject:定义了RealSubject和Proxy的公共 ...
- JS中的call()和apply()方法(转)
转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS 1.方法定义 call方法: 语法:call([thisOb ...
- 06.yield
Thread.yield()方法的作用:暂停当前正在执行的线程,并执行其他线程.(可能没有效果) yield()让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得运行的机会.因此, ...
- 2PC和3PC
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484077.html 2PC 是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点 ...
- shell脚本相关关系、浮点、循环
将一堆命令放在脚本里变成可执行脚本执行: 脚本编写,文件名为.sh,获取hostname的主机名 系统变量: Env:查看系统变量 Set :打印所有变量可以和grep和用 Export path:定 ...
- SQL Join连接
SQL 连接(Joins) SQL join 用于把来自两个或多个表的行结合起来. SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 J ...
- TableStore最佳实践:轻松实现轨迹管理与地理围栏
摘要: 基于TableStore轻松实现亿量级轨迹管理与地理围栏 一.方案背景 轨迹管理系统日常生活中使用非常普遍,如外卖派送轨迹.快递物流流转.车辆定位轨迹等.该场景与地理位置管理类似,核心点与瓶颈 ...
- Delphi正则表达式使用方法(TPerlRegEx)
目前主流的delphi下的正则表达式,应该是 PerlRegEx . 官方网站: http://www.regular-expressions.info/delphi.html 直接下载: ht ...
- [CSP-S模拟测试]:游戏(最短路)
题目传送门(内部题35) 输入格式 第一行,两个正整数$X,Y$.第二行,三个非负整数$A,B,C$.第三行,一个正整数$N$.接下来$N$行,每行两个非负整数$x_i,y_i$. 输出格式 一行,一 ...