python第六天
深浅拷贝,元祖,字典 ,集合的定义以及基本操作方法
深浅拷贝
# 值拷贝:应用场景最多
值拷贝:
先创建一个列表
ls = [1, 'abc', [10]]
再定义 ls1 = ls 此处ls1会直接将ls中在栈区存放的地址拿过来,也就是列表的门牌号,
所以在 ls 当列表内部的元素发生变化,ls1都会随之变化,因为值拷贝指挥把存储列表的地址拿过来,并不能把值的地址拿过来 浅拷贝:
再定义 ls2 = ls.copy() 使用copy()元素,它会早内存中开辟新列表的空间,但列表中的值地址都是直接从ls列表中拿过来的
所以 ls 内部的不可改变类型的元素地址不会改变,而可变类型元素发生改变,ls2中存放的值会随之变化
深拷贝:
再定义 ls3 = deepcopy(ls) 使用deepcopy()元素, 它会在内存中开辟新的列表空间,ls列表中的不可变类型的地址直接拿过来(优化机制),而可变类型的元素地址会重新开辟新的空间,
当 ls 内部的所有类型的值发生改变,ls3都不会随之变化
元组类型
'''
元组:可以理解为不可变的列表
# 1.值可以为任意类型
# 2.可以存放多个值 - 可以进行成员运算
# 3.可以存放重复的值 - 可以计算成员出现的次数
# 4.有序存储 - 可以通过索引取值,可以切片
'''
# 常用操作
# 1.索引取值
tuple = (1,2,3,4,5)
print(tuple[1],type(tuple[1]))
print(tuple[-3],type(tuple[-3]))
# 2.运算(拼接)
tuple = (1,2,3,4,5)
tuple1 = (5,7,8,9,10)
print(tuple + tuple1)
# 3.长度
tuple = (1,2,3,4,5)
print(len(tuple))
# 4.切片
tuple = (1,2,3,4,5)
print(tuple[1:5:1])
)
# 5.成员运算
tuple = (1,2,3,4,5)
print(1 in tuple) # 判断 1 是不是在 tuple 中,返回bool
print(1 not in tuple) # 判断 1 是不是不在tuple中 返回bool
# 6.for循环
tuple = (1,2,3,4,5)
for i in tuple:
print(i,end = '')
print()
# 方法
tuple = (1,2,3,4,5)
print(tuple.count(5)) # 对象5在tuple元组中出现的次数
tuple = (1,2,3,4,5)
print(tuple.index(3,1,len(tuple))) # 对象3在元组内 从1号位至末尾,第一次出现的索引,此处返还 2
字典类型
字典相关概念
# 容器(集合):存放多个值的变量
# 单列容器(系统中的单列容器很多):list | tuple
# 双列容器(map):只有dict,存放数据 成对出现,dict存放数据采用 key-value键值对方式
# 字典中的key可以为什么类型:key必须为不可变类型
# -- key是取value的唯一依据,key一旦被确定,就需要唯一确定(不能被改变)
# 字典中的value可以为什么类型:value可以为任意类型
# -- value是用来存放世间所有存在的数据
# key要确保唯一性,不能重复,值可以重复,并且可以被改变 => 字典为可变类型
dic = {'a': 10, 1: 20, True: 30, (): 40} # 1和True都是1,key具有唯一性,所以只保留最后一次值
print(dic) # {'a': 10, 1: 30, (): 40}
字典的定义
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 , 英文名称 dict ,格式如下所示:
d = {key1 : value1, key2 : value2 }
不允许同一个key出现两次。创建时如果同一个key被赋值两次,后一个值会被记住,key的命名与变量名的命名一样
而value值它可以为任意类型的值
# 空字典
d1 = {}
d2 = dict()
# 用map映射创建字典
d3 = dict({'a': 1, 'b': 1})
print(d3)
# 用关键字赋值方式
d4 = dict(name='Bob', age=18) # 参数=左侧的名字就是合法的变量名,都会被转化为字符串形式的key
print(d4)
# 创建有多个key值采用默认值的方式: 默认值不写默认None,也可以自定义
d5 = {}.fromkeys('abc', 0)
print(d5)
字典的操作
dic = {'a': 1, 'b': 2}
print(dic)
# 增: 字典名[key] = 值 => key已存在就是修改值,不存在就是新增值
dic = {'a':1,'b':2,'c':3,'d':4}
print(dic)
dic['e'] = 5 # 直接把需要添加的key放入[]中 等号后面放value
print(dic)
# 改
dic = {'a':1,'b':2,'c':3,'d':4}
print(dic)
dic['d'] = 5 # 此处把 ' d ' 对应的value 改成了 5 ,方法与添加一样
print(dic)
# 查:字典名[key]
dic = {'a':1,'b':2,'c':3,'d':4}
print(dic)
print(dic['d']) 此处查询key 'd',返回’d'的value, 它只能查找已有的key,没有会崩溃(报错)
有默认值的查询:如果字典中有所查询的key,那么他会取出对应value,如果没有找到key,他会报错,可以用get()来获取,如果没有找到,他会返还默认值,默认值可以自定义
dic = {'a':1,'b':2,'c':3,}
print(dic.get('d', '未找到')) 此处使用get(),此处并没有'd'这个key,他会返回一个None,如果设定了默认值就返回默认值,此处默认值为 '未找到'
# 删
dic = {'a':3,'b':4,'c':5}
print(dic.clear()) # 清空整个字典,返回值为None
# pop(k)删除指定key的value并返还删除的value
dic = {'a':3,'b':4,'c':5}
print(dic.pop('a')) #此处删除了 'a' ,打印它会返回删除的value
print(dic) # 再次打印不会出现key 'a' 了
# dic = dic.pop('a')
print(dic)
# 从dic末尾删除,返还(key, value)形成的元组
dic = {'a':3,'b':4,'c':5}
dic = dic.popitem() #使用 popitem() 从末尾删除 key和value
print(dic) # 打印后返回(key,value)形成的元祖
# 其他方法
# 更新字典: a有值覆盖,c没被新操作,带下来,b为新增,增加并赋值
dic = {'a': 1, 'c': 2}
d = {'a': 10, 'b': 20}
dic.update(d)
print(dic) # {'a': 10, 'c': 2, 'b': 20}
# 带默认值的新增: 新增key,key已有,啥事不干,没有添加key,值就是第二个参数
setdefault() 方法和 get()方法 类似, 如果key不已经存在于字典中,将会添加key并将value设为默认值。
dic = {'a':3,'b':4,'c':5}
print(dic.setdefault('d','未找到'))
# 字典的循环
# 1.直接循环,就是循环得到key
dic = {'a':1,'b':2,'c':3}
for i in dic: #直接for 循环
print(i) # 此处输出结果为 a,b,c 得到 key
# 2.循环keys
dic = {'a':1,'b':2,'c':3}
print(dic.keys()) # 输出结果为 dict_keys(['a', 'b', 'c']) dic = {'a':1,'b':2,'c':3}
for i in dic.keys(): #for 循环keys()
print(i) # 输出结果为 a,b,c
# 3.循环values
dic = {'a':1,'b':2,'c':3}
print(dic.values()) # 输出的结果为dict_values([1, 2, 3])
dic = {'a':1,'b':2,'c':3}
for i in dic.values():
print(i) # 输出结果为 1,2,3
# 同时循环key和value (key, value)
dic = {'a':1,'b':2,'c':3}
print(dic.items()) #此处输出结果为dict_items([('a', 1), ('b', 2), ('c', 3)])
dic = {'a':1,'b':2,'c':3}
for i in dic.items():
print(i) # 此处输出结果为(’a',1)('b',2)('c',3)
# 重点****
dic = {'a':1,'b':2,'c':3}
for k,v in dic.items(): # key ,和value一起循环
print(k,v) # 此处输出结果为 a 1 | b 2 | c 3
# 解压赋值
# a, _, _, b = (1, 2, 3, 4)
集合类型
定义空集合不能用 {} ,因为用来标示空字典的,我们定义空集合可以用set()
可以在括号里加(),从内部括号中传值。
s = set() # 空集合
s = set(('a','b','c'))
print(s, type(s))
如果 {} 中不存value,只存一个元素,# a = {'a','b','c'} 那么他就是一个合集,如果放入key + value那就是字典
# 概念:
# 1.set为可变类型 - 可增可删
# 2.set为去重存储 - set中不能存放重复数据
# 3.set为无序存储 - 不能索引取值
# 4.set为单列容器 - 没有取值的key
# 总结:set不能取值
# 增
a = set(('a','b'))
a.add('c')
print(a) # 使用add() 依次可以传入一个参数,无序添加(因为集合本无序) 用它自己和其他元素的并集更新一个集合:
a = set(('a','b'))
a.update('c','d','e','f') # 直接添加默认只可合并可迭代对象(数字不可迭代)
print(a) # 无序
a = set((1,'b'))
a.update({'c',2}) # 如果需要合并数字,可以在括号中添加可以迭代的括号()[] {},
print(a) # 打印结果是合集 {2,'b','c',1} (也是无序排列)
# 删
a = set((1,'b'))
a = a.pop() # 删除并返回任意集合元素。如果集合为空,则引发KeyError(报错) pop()不接受人和参数设定
print(a)
a = set((1,'b'))
a.remove(1,) # remove()可以删除指定的值,但是每次只能指定一个值。而且指定的值必须在集合内,否则报错
print(a)
a = set((1,'b'))
a.clear() #从该集合中删除所有元素,返回空集合
print(a)
# set运算
# 交集:两个都有 &
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py & lx) # 算两个集合的交集,返还所求的相同的元素,此处为egon
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py.intersection(lx)) # intersection 的功能等同与 & 号
# 合集:两个的合体
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py | lx) # 将两个集合的并集作为一个新集合返回。(即任何一个集合中的所有元素。)
print(py.uinon(lx)) # union 效果等同与 | 号
# 对称交集:抛出共有的办法的合体 ^
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py ^ lx) # 将两个集合的对称 差分,转化为一个新的集合,(即恰好位于其中一个集合中的所有元素。)
# 理论上可以理解为转换为一个新集合,存放两个集合所有的值,但是因为集合去重效果,会把相同的值,只存放一个
print(py.symmetric_difference(lx)) # symmetric_difference 效果等同与 ^ 号
# 差集:独有的
py = {'a', 'b', 'c', 'egon'}
lx = {'x', 'y', 'z', 'egon'}
print(py - lx) # 返回 py 中与 lx不重复的值
print(py.difference(lx)) #difference 效果等同与 - 号
print(lx - py) # 返回 lx 中与 lx 不重复的值
print(lx.difference(py)) #difference 效果等同与 - 号
# 比较:前提一定是包含关系
子类与父类的比较
s1 = {'1', '2'}
s2 = {'2'} # s2 中的元素必须在s1中才可比较
print(s1 < s2) # 此处是False,因为s1 要大于s2
python第六天的更多相关文章
- Python第六天 类型转换
Python第六天 类型转换 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 变量 运算符与表达式 input()与raw_inp ...
- 孤荷凌寒自学python第六天 列表的嵌套与列表的主要方法
孤荷凌寒自学python第六天 列表的嵌套与列表的主要方法 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) (同步的语音笔记朗读:https://www.ximalaya.com/keji/1 ...
- python 第六天
模块 包 我们可以同过包来避免与其它模块的命名冲突,例如,调用在外层 demo.py 调用 demoFile 文件夹中的demo.py 就可以通过 demo.demo 来调用 请注意,每一个包目录下面 ...
- python第六天函数,定义、调用、不带参函数、带参函数等
在python定义函数需要用到的关键字是 def xxxx():,这个关键字就是 defined 的缩写.具体看实例: >>> def hello(): print("你 ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- 系统学习python第六天学习笔记
1.补充 1.列表方法补充 reverse,反转. v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) sort,排序 v1 = [11,22 ...
- python第六天(元组、字典、集合)
一.元组(tuple) 作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要用来读 定义:与列表类型相比,只不过把[ ]换成() age=(11,22,33,44,55)prin ...
- 学习Python第六天
今天我们讲讲数据类型中的集合,博客写得有点糙,后续应该要进行优化优化了........ 集合:无序,不重复的数据组合,主要作用:去重,把一个列表变成集合,就自动去重了 基本语法:S = {1}类型为集 ...
- Python 搭建环境踩过的那些坑
实践出真知,学习 Python 第六天,准备开始尝试写一些 Python 的实例.之前学习过程主要是参照的 廖雪峰老师的教程.搭建环境的过程,被很多坑围绕着. 版本选择 版本选择 Python 3.5 ...
随机推荐
- 简单的C#实体映射 AutoMapper
AutoMapper是对象到对象的映射工具.在完成映射规则之后,AutoMapper可以将源对象转换为目标对象. 要映射实体 public class SourceModel { public int ...
- php连接数据库,以及日期处理函数
php连接数据库,以及日期处理函数 $conn=mysql_connect("10.0.10.0:0000","root","123456" ...
- iOS NFC
#import <CoreNFC/CoreNFC.h> @interface ViewController ()<NFCNDEFReaderSessionDelegate> @ ...
- java加载properties文件的六中基本方式实现
java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过impo ...
- Django入门之路
Web框架开发-Django基础之web应用,Http协议 web框架开发-web框架简介,wsgiref模块,DIY一个web框架 web框架开发-Django简介 web框架开发-静态文件配置 w ...
- Rsync + sersync 实时同步备份
一 Rsync + Sersync 实时同步介绍 1.Rsync 服务搭建介绍 云机上搭建Rsync server,在本地搭建Rsync Clinet. 2. Sersync 服务搭建介绍 ...
- ASP.NET Core部署在IIS上
1.下载安装 Windows Server Hosting ,它的作用是,让IIS有反向代理功能(Asp.Net Core Module负责反向代理工作),将请求转发到 Kestrel 2.发布网站, ...
- 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading)
前言 接下来会陆续详细讲解EF Core 2.1新特性,本节我们来讲讲EF Core 2.1新特性延迟加载,如果您用过EF 6.x就知道滥用延迟加载所带来的灾难,同时呢,对此深知的童鞋到了EF Cor ...
- 随心测试_软测基础_008<测试对象整体认识>
关于:软件测试的整体认识,首先:认识:测试 对象 与 测试主体(人) 之间的关系 核心理解如下: 不同的测试对象,选取 不同的测试方法 软件项目的周期中:提出 需求 ——>软件实现—— ...
- QinQ 简介
QinQ 是一种二层隧道协议,通过将用户的私网报文封装上外层 VLAN Tag,使其携带两层 VLAN Tag 穿越公网,从而为用户提供了一种比较简单的二层VPN隧道技术.QinQ 的实现方式可分为两 ...