Day7--Python--基础数据类型补充,集合,深浅拷贝
一.基础数据类型补充
1.join() 把列表中的每一项(必须是字符串)用字符串拼接 与split()相反
lst = ["汪峰", "吴君如", "李嘉欣", "陈慧琳", "关之琳"]
# 遍历列表. 把列表中的每一项用"_" 做拼接
s = "_".join(lst) # 把列表转化成字符串
print(s) s1 = "汪峰_吴君如_李嘉欣_陈慧琳_关之琳"
ls = s1.split("_") # 把字符串转化成列表
print(ls) print("*".join("马化腾")) #迭代着加入 马*化*腾
2.关于删除(重点)
1.循环迭代过程中不能删除
2.创建新列表,把要删除的内容保存在新列表中,循环新列表,删除老列表
3.字典在循环中不能改变键值对数量 lst = ["渣渣辉", "古天绿", "陈小春", "彭佳慧", "郑中基", "胡辣汤"]
# lst.clear()
for el in lst: # for 内部有一个变量来记录当前被循环的位置, 索引.
lst.remove(el) # 直接删除. 是删不干净的. 原因是每次删除都设计到元素的移动. 索引在变. 先把要删除的内容保存在一个新列表中. 循环这个新列表. 删除老列表
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 = {"谢逊": '金毛狮王', "韦一笑":"青翼蝠王","殷天正":"白眉鹰王","金花婆婆":"紫衫龙王"}
for k in dic:
dic['谢逊'] = "张无忌他爹"
print(dic) 3.fromkeys
dict.fromkeys(k, v) 把key迭代,和value组合成k:v创建新字典,所有v是同一个地址
d = dict.fromkeys('abc', 666)
print(d) #创建新字典 d = {}
# fromkeys正常来说应该是类名来访问的.
dd = d.fromkeys(["胡辣汤","are you 确定?"], "周芷若") # fromkeys是一个类中的静态方法.作用是创建新字典
print(d) # 原字典没有改变
print(dd) # 新的字典是通过第一个参数的迭代. 和第二个参数组合成key:value创建新字典 d = dict.fromkeys(["哇哈哈", "爽歪歪"], []) # 所有的key用的value都是同一个内存地址.都是同一个列表,改变其中一个。 另一个也跟着改变
d["哇哈哈"].append("张无忌")
print(d) print(id(d['哇哈哈']), id(d["爽歪歪"]))
4.类型转换
元组 => 列表 list(tuple)
列表 => 元组 tuple(list)
list => str str.join(list)
str => list str.split()
转换成False的数据:
0,'',None,[],(),{},set() ==> False ## 交换值
a = 10
b = 20
a, b = b, a
print(a, b)
二.set集合
1.特点: 无序,去重,内部元素可哈希
lst = []
list(set(lst)) #去重复, 因为集合是无序的,所以去重后顺序会打乱.
# 看一个对象里面的元素是否可修改
print('__setitem__' in dir(set)) # False set中的元素不可修改,不可变.
数据类型:不重复,无序,它里面的元素是可哈希的.它本身是不可哈希的,因此不能作为字典的 key
set相当于不存value的字典,只存key 空集合 set()
作用: 1.去重 (重点)
li = [11,11,22,22,33,33,44,44]
li = list(set(li))
print(li) 2.数据关系的测试
增:
set1 = {'alex', 'wusir', 'egon', 'barry', 'ritian'}
set1.add('女神')
set1.update('abc') #迭代着增加
set1.update([1, 2, 3]) 删:
set1.remove('alex') #如果对象不存在,则报错KeyError
set1.discard() #如果删除对象不存在,也不会报错
set1.pop() #随机删除
set1.clear() #清空 空集合 set()
del set1 删除整个集合 改:
删除后增加
set1.remove('alex')
set1.add('elsa') 查:
for i in set1:
print(i) s = {1, 2, 3, 4}
print(2 in s) #存在返回True,不存在返回False 3.求交集:
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2) #{4, 5}
print(set1.interscetion(set2)) 反交集:
print(set1 ^ set2)
print(set.symmetric_difference(set2)) 并集:
print(set1 | set2)
print(set1.union(set2)) 差集:
print(set1 - set2)
print(set2 - set1) 子集与超集:
set1 = {1,2,3}
set2 = {1,2,3,4,5,6,}
print(set1.issubset(set2)) #子集 set1是set2的子集
print(set2.issuperset(set1)) #超集 set2是set1的超集 set1 = {'barry', 'wusir'}
set2 = frozenset(set1) # 冻集合不能进行添加和删除操作
print(set2,type(set2)) ---------------------------------------------------------
dic = {"a":"哇哈哈", "a":"爽歪歪"}
print(dic) # key 不会重复
dic[[1,2,3]] = "哇哈哈" # 必须是可哈希的 s = set() # 空集合
s = {1,2,3,6,3,4,6,4, [4,5,6]} # 不重复, 必须是可哈希的
print(s) set其实就是不存value的字典. 只存key
去重复
lst = [1,2,3,4,4,4,4,5,5,6,7,7,7]
s = set(lst)
lst = list(s)
print(lst) s = {"赵本山", "范伟", "小沈阳", "高秀敏", "宋小宝"}
s.add("赵铁柱")
s.add("李小花")
s.add("王尼玛")
s.add("张全蛋")
print(s) s.update(("刘伟", '张伟', "张三丰")) # 迭代更新 [],(),{}里面可以放空列表,空元组,空集合,空字典,字典提取key迭代加入 item = s.pop()
s.remove("小沈阳")
print(s)
print(item) for el in s:
print(el) 三.深浅拷贝 #不是指向一个内存地址,而是在内存中开辟了一个内存空间
1.赋值
赋值使用同一个内存地址,多个变量共享一个对象
2.浅拷贝
对于浅copy来说, 第一层创建的是新的内存地址,
而从第二层开始, 指向的都是同一个内存地址,
所以, 对于第二层以及更深的层数来说, 保持一致性. lst= lst[:] #切片是浅拷贝 l1 = [1, 2, 3]
l2 = l1.copy()
l1.append(111)
print(l1, l2)
print(id(l1), id(l2)) l1 = [1, 2, 3, [1, 2, 3], 4]
l2 = l1.copy()
l1[3].append(5)
print(l1, l2)
3.深拷贝
对于深copy来说,两个对象是完全独立的,
改变任意一个元素(无论多少层),另一个绝对不改变 import copy #导入拷贝模块
l1 = [1,2,3,[1,2,3],4]
l2 = copy.deepcopy(l1)
l1[3].append(666)
print(l1, l2) l1 = [1,2,3,[22,33]]
l2 = l1[:] #切片相当于浅copy
l1[3].append(666)
print(l2)
Day7--Python--基础数据类型补充,集合,深浅拷贝的更多相关文章
- Python基础数据类型补充及深浅拷贝
本节主要内容:1. 基础数据类型补充2. set集合3. 深浅拷贝主要内容:一. 基础数据类型补充首先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的自己看一看就可以了.我们补充给一 ...
- python基础(9):基本数据类型四(set集合)、基础数据类型补充、深浅拷贝
1. 基础数据类型补充 li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲"] s = "_&qu ...
- python基础篇 07set集合 深浅拷贝
本节主要内容:1. 基础数据类型补充2. set集合3. 深浅拷⻉ " ".join方法 循环删除列表中的内容: 错误的 原因:在for循环中,循环到第一个,然后删除,删除之 ...
- python摸爬滚打之day07----基本数据类型补充, 集合, 深浅拷贝
1.补充 1.1 join()字符串拼接. strs = "阿妹哦你是我的丫个哩个啷" nw_strs = "_".join(strs) print(nw_s ...
- Python基础数据类型之集合
Python基础数据类型之集合 集合(set)是Python基本数据类型之一,它具有天生的去重能力,即集合中的元素不能重复.集合也是无序的,且集合中的元素必须是不可变类型. 一.如何创建一个集合 #1 ...
- python基础数据类型补充
python_day_7 一. 今日主要内容: 1. 补充基础数据类型的相关知识点 str. join() 把列表变成字符串 列表不能再循环的时候删除. 因为索引会跟着改变 字典也不能直接循环删除.把 ...
- is,数据类型补充,set,深浅拷贝
十二.基础数据类型补充: 1.join 可以把列表变成字符串. s = ‘abc’ s1 = s.join(‘非常可乐’) print(s1) #非abc常abc可abc乐abc s = " ...
- Python基础数据类型之集合以及其他和深浅copy
一.基础数据类型汇总补充 list 在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错(可以从后向前循环删除,这样不会改变未删元素的索引). 错误示范: lis = [,,, ...
- 《Python》 基础数据类型补充和深浅copy
一.基础数据类型的补充 元组: 如果元组中只有一个数据,且没有逗号,则该‘元组’数据类型与里面的数据类型一致 列表: 列表之间可加不可减,可跟数字相乘 l1=['wang','rui'] l2=['c ...
随机推荐
- python设计模式第二十四天【命令模式】
1.使用场景 (1)调用过程比较繁琐,需要封装 (2)调用参数需要进行处理封装 (3)需要添加额外的功能,例如,日志,缓存,操作记录等 2.代码实现 #!/usr/bin/env python #! ...
- MyBatis Generator报错:Cannot instantiate object of type
[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate ( ...
- 部署 Django
补充说明:关于项目部署,历来是开发和运维人员的痛点.造成部署困难的主要原因之一是大家的Linux环境不同,这包括发行版.解释器.插件.运行库.配置.版本级别等等太多太多的细节.因此,一个成功的部署案例 ...
- 了解AutoCAD对象层次结构 —— 6 ——块表记录
块表记录是包裹实体对象的最后一层包装了,接下来让我们继续利用MgdDbg工具查看上一小节创建的块定义内的对象有哪些. 操作步骤如下:选择块表记录TestBlock,在右侧列表中找到“Entities ...
- WebAPI和WebService的区别
WebAPI和WebService的区别 WebAPI用的是http协议,WebService用的是soap协议 WebAPI无状态,相对WebService更轻量级.WebAPI支持如get,pos ...
- @ControllerAdvice+@ExceptionHandler处理架构异常捕获
1.注解引入 1) @ControllerAdvice - 控制器增强 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) ...
- Antenna Placement POJ - 3020 二分图匹配 匈牙利 拆点建图 最小路径覆盖
题意:图没什么用 给出一个地图 地图上有 点 一次可以覆盖2个连续 的点( 左右 或者 上下表示连续)问最少几条边可以使得每个点都被覆盖 最小路径覆盖 最小路径覆盖=|G|-最大匹配数 ...
- 洛谷P3870开关题解
我们先看题面,一看是一个区间操作,再看一下数据范围,就可以很轻松地想到是用一个数据结构来加快区间查询和修改的速度,所以我们很自然的就想到了线段树. 但是这个题还跟普通的线段树不一样,这个题可以说要思考 ...
- 【XSY2787】Mythological VII 贪心
题目描述 有两个指针\(l,r\),初始时\(l=r=k\) 给你\(a_1,\ldots,a_n\),你要移动\(l,r\),\(l\)只能每次向左移一个数,\(r\)只能向右移一个数,要求任意时刻 ...
- pytorch CNN 手写数字识别
一个被放弃的入门级的例子终于被我实现了,虽然还不太完美,但还是想记录下 1.预处理 相比较从库里下载数据集(关键是经常失败,格式也看不懂),更喜欢直接拿图片,从网上找了半天,最后从CSDN上下载了一个 ...