列表相关函数,深浅拷贝,字典相关函数,集合相关操作及文件操作---day08
1.列表的相关函数
append()
功能:向列表的末尾添加新的元素
格式:列表.append(值)
返回值:None
注意:新添加的值在列表的末尾,该函数直接操作原有列表 insert()
功能:在指定索引之前插入元素
格式:列表.insert(索引,值)
返回值:None
注意:直接改变原有列表 extend()
功能:迭代追加所有元素
格式:列表.extend(可迭代行数据)
返回值:None
注意:直接改变原有列表 pop()
功能:通过指定索引删除元素,若没有索引移除最后那个
格式:列表.pop(索引)
返回值:删除的元素
注意:没有指定索引,默认删除最以后一个元素 remove()
功能:通过给予的值来删除,如果多个相同元素,默认删除第一个
格式:列表.remove(值)
返回值:无
注意:如果有索引的情况推荐使用pop,效率高于remove clear()
功能:情况列表
格式:列表.clear()
返回值:空列表 index()
功能:获取某个值在列表中的索引
格式:列表.index(值[,start][,end]) #[]表达参数可选项
返回值:找到返回索引 (找不到报错) count()
功能:计算某个元素出现的次数
格式:列表.count(值)
返回值:次数 sort()
功能:列表排序(默认从小到大排序)
格式:列表.sort(reverse=False)
返回值:None
注意:直接更改原列表 reverse()
功能:列表反转操作
格式:列表.reverse()
返回值:None
注意:直接更改原列表
注意:对字母进行排序字母排序依据ascii编码,字母是一位一位的进行比较,如果第一位相同再去比较第二位依次类推。
另外可以对中文进行排序,但是无规律可循
2.浅拷贝和深拷贝
copy模块中有 浅拷贝 和 深拷贝两种方法
(1)浅拷贝:浅拷贝只拷贝外层列表,内层列表跟随原列表进行改变
浅拷贝copy.copy(listvar)或listvar.copy()
(2)深拷贝:拷贝整个列表 内外列表都不跟随原列表进行改变
深拷贝copy.deepcopy(listvar)
注意:copy模块的copy方法和python内置的函数copy一样,都是浅拷贝
# ### 深拷贝 和 浅拷贝
'''
a = 19
b = a
print(id(b),id(a)) #1433169504 1433169504
a = 20
print(b) #19 lst1 = [1,2,3]
lst2 = lst1
lst1.append(4)
print(lst2) #[1,2,3,4]
''' #(1) 浅拷贝(只拷贝一级所有的元素 其他层级延续以前的数据) #方法1
lst = [1,2,3]
lst2 = lst.copy()
lst.append(5)
print(lst) #[1,2,3,5]
print(lst2) #[1,2,3] lst2[0] = 2
print(id(lst[0]),id(lst2[0])) #1450011680 #1450011712 # 方法二(推荐)
import copy
lst = [1,2,3]
'''copy.copy copy模块.copy函数()'''
lst2 = copy.copy(lst)
lst.append(10)
print(lst) #[1, 2, 3, 10]
print(lst2) #[1, 2, 3] #存在二级容器(会沿用之前的数据 之前数据改变也会相应的改变)
lst1 = [1,2,3,[4,5,6]]
lst2 = copy.copy(lst1)
lst1[-1].append(10)
print(lst1) #[1,2,3,[4,5,6.10]]
print(lst2) #[1,2,3,[4,5,6.10]] #(2) 深拷贝(所有层级的元素都单独拷贝一份,形成独立的副本)
''' # 深拷贝语法copy.deepcopy()'''
lst = [1,2,3,[4,5,6]]
lst2 = copy.deepcopy(lst)
lst[-1].append(100)
print(lst) #[1, 2, 3, [4, 5, 6, 100]]
print(lst2) #[1, 2, 3, [4, 5, 6]]
print(id(lst[-1])) #32093456不一致
print(id(lst[-1])) #45723467不一致 #深拷贝可以应用在字典当时
dic = {'a':1,'b':[1,2,3]}
dic2 = copy.deepcopy(dic)
dic['b'].append(4)
print(dic) #{'a':1,'b':[1,2,3.4]}
print(dic2) #{'a':1,'b':[1,2,3]} #copy 和 deepcopy 谁更快 浅拷贝更快
# 浅拷贝:只拷贝第一层级所有的元素 copy.copy() 如存在第二层级 则沿用之前的数据
#深拷贝 :拷贝所有层级的元素 都单独开启新的空间 copy.deepcopy()
#(地址:[不可变的数据类型]会暂时指向原数据 [可变的数据]会独立开辟空间) #可变数据:list set dict
#不可变数据:int float bool complex str tuple lst1 = [1,2,3,[4,5,6]]
lst2 = copy.copy(lst1)
lst1[0]=10
print(lst1)
print(lst2)
#[10, 2, 3, [4, 5, 6]]
#[1, 2, 3, [4, 5, 6]]
#浅拷贝 单独拷贝一级层级,lst1的一级层级改变,lst2的一级层级不变
#另外浅拷贝中当有二级层级时,沿用之前的二级层级,lst1的二级层级改变,lst2跟着改变 #深拷贝 全部单独拷贝一份 其中不可变的数据类型暂时指向原数据,节省内存
#可变的数据类型会单独开辟空间,lst1的二级层级改变,lst2的二级层级不改变
#因为都是单独独立的空间
3.字典的相关函数
fromkeys() 使用一组键和默认值创建字典
st = ['a','b','c']
dic = {}.fromkeys(lst,None)
print(dic) #{'a': None, 'b': None, 'c': None} #注意点
lst = ['a','b','c']
dic2 = {}.fromkeys(lst,[1,2])
dic2['a'].append(3)
print(dic2) #{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
#当用fromkeys创建键值对时,如值是可变的数据类型时,
#在可变的列表中添加数据,对应的其他键值对的值也会同样添加相应的值
pop() 通过键去删除键值对(若没有该键可设置默认值,预防报错)
dic = {'top': 'the shy', 'middle': 'faker', 'bottom': '文森特', 'jungle': '鞋王', 'support': 'bao_blue'}
#pop() 通过键去删除键值对(若没有该键可设置默认值,防止报错)
res = dic.pop('bottom')
print(res) #文森特
print(dic) #{'top': 'the shy', 'middle': 'faker', 'jungle': '鞋王', 'support': 'bao_blue'}
#可在pop中第二个参数位置设置默认值,预防报错
res = dic.pop('bottom','没有')
print(res)
popitem() 删除最后一个键值对 dic = {'top': 'the shy', 'middle': 'faker', 'bottom': '文森特', 'jungle': '鞋王', 'support': 'bao_blue'}
res = dic.popitem()
print(dic) #{'top': 'the shy', 'middle': 'faker', 'bottom': '文森特', 'jungle': '鞋王'}
print(res) #('support', 'bao_blue') 删除的键值对以元组形式返回
clear() 清空字典 dic.clear()
print(dic)
update() 批量更新(有该键就更新,没有该键就添加)
'''有该键就更新,没有该键就添加'''
#方法一 推荐使用
dic = {"ww":"大帅哥","spd":"渣男","sql":"负心男"}
newdic = {"ww":"美男子","wz":"一表人才","yh":"未来的土豪"}
dic.update(newdic)
print(dic) # {'ww': '美男子', 'spd': '渣男', 'sql': '负心男', 'wz': '一表人才', 'yh': '未来的土豪'} #方法二
dic.update(hj='未来战士',wyq='警察')
print(dic)
get() 通过键获取值(若没有该键可设默认值,预防报错)
dic = {"ww":"大帅哥","spd":"渣男","sql":"负心男"}
res = dic['ww']
print(res) # 大帅哥
#get方法可以预防报错 默认返回None
res = dic.get('www')
print(res) #None
#get 方法可以设置默认值
res = dic.get('www','该键不存在')
print(res)
keys() 将字典的键组成新的可迭代对象
values() 将字典的值组成新的可迭代对象
items() 将字典的键值对凑成一个个元组,组成新的可迭代对象
# keys() 将字典的键组成新的可迭代对象
dic = {"wy":"智多星","lzs":"花和尚","zs":"浪里白条"}
res = dic.keys()
print(res)#dict_keys(['wy', 'lzs', 'zs']) 返回的是个可迭代对象,可以for循环取值 #values() 将字典中的值组成新的可迭代对象
dic = {"wy":"智多星","lzs":"花和尚","zs":"浪里白条"}
res = dic.values()
print(res) ##dict_values(['智多星', '花和尚', '浪里白条'])返回的是个可迭代对象,可以for循环取值 #items() 将字典的键值对凑成一个个元组 组成新的可迭代对象
dic = {"wy":"智多星","lzs":"花和尚","zs":"浪里白条"}
res =dic.items()
print(res)
#dict_items([('wy', '智多星'), ('lzs', '花和尚'), ('zs', '浪里白条')])
#列表嵌套元组的形式存储 可通过for循环取值
#变量的解包
dic = {"wy":"智多星","lzs":"花和尚","zs":"浪里白条"}
res = dic.items()
print(res)
#dict_items([('wy', '智多星'), ('lzs', '花和尚'), ('zs', '浪里白条')])
for k,v in res:
print(k,v)
'''
wy 智多星
lzs 花和尚
zs 浪里白条
'''
4.集合中的交差并补
intersection() 交集 共有的
set1 = {"the shy" , "rookie" , "jacklove" , "神秘男孩"}
set2 = {"蔡国庆","倪萍","赵忠祥","神秘男孩"}
res = set1.intersection(set2)
print(res) #{'神秘男孩'} #简写 &
res = set1 & set2
print(res) #{'神秘男孩'}
difference() 差集 我有的你没有
set1 = {"the shy" , "rookie" , "jacklove" , "神秘男孩"}
set2 = {"蔡国庆","倪萍","赵忠祥","神秘男孩"}
res = set1.difference(set2)
print(res) #{'jacklove', 'the shy', 'rookie'}
res = set2.difference(set1)
print(res) # {'蔡国庆', '倪萍', '赵忠祥'}
#注意哪个集合在前 哪个集合在后 结果不一致 # 简写
res = set1 -set2
print(res) #{'jacklove', 'the shy', 'rookie'}
union() 并集,两个集合中所有元素包括共有的元素 集合自带去重
set1 = {"the shy" , "rookie" , "jacklove" , "神秘男孩"}
set2 = {"蔡国庆","倪萍","赵忠祥","神秘男孩"}
res = set1.union(set2)
print(res) #{'the shy', '神秘男孩', '倪萍', '赵忠祥', 'rookie', 'jacklove', '蔡国庆'} #简写 |
res = set1 | set2
print(res)
symmetric_difference() 对称差集(补集情况涵盖其中)
#可以理解为除了交集以外的所有元素
set1 = {"the shy" , "rookie" , "jacklove" , "神秘男孩"}
set2 = {"蔡国庆","倪萍","赵忠祥","神秘男孩"}
res = set1.symmetric_difference(set2)
print(res) #{'赵忠祥', '倪萍', 'rookie', '蔡国庆', 'the shy', 'jacklove'} #简写 ^
res = set1 ^ set2
print(res)
issubset() 判断是否是子集
set1 = {"张恒","杨浩","刘伟"}
set2 = {"刘伟"}
res = set1.issubset(set2) #set1是否是set2的子集
print(res) #False
res = set2.issubset(set1) #set2是否是set1的子集
print(res) #True #简写 <
set1 = {"张恒","杨浩","刘伟"}
set2 = {"刘伟"}
res = set1 < set2
print(res) #False
issuperset() 判断是否是父集
set1 = {"张恒","杨浩","刘伟"}
set2 = {"刘伟"}
res = set1.issuperset(set2) #set1是否是set2的父集
print(res) #简写 >
res = set1 > set2
print(res) #True
isdisjoint() 检测两集合是否不相交 不相交为True 相交为False
set1 = {"张恒","杨浩","刘伟"}
set2 = {"刘伟"}
res = set1.isdisjoint(set2)
print(res) #False 相交
5.集合相关的函数
add() 向集合中添加数据
update() 迭代着添加
clear() 清空集合
pop() 随机删除集合中的一个数据
remove() 删除集合中指定的值(不存在则报错)
discard() 删除集合中指定的值(不存在的不删除 推荐使用)
6.冰冻集合
'''
forzenset 可强转容器类型数据变成冰冻集合
特征:冰冻集合一旦创建,不能再做任何的添加或者删除操作,只能做交叉并补
'''
#空的冰冻集合
fz = frozenset()
print(fz,type(fz)) # frozenset() <class 'frozenset'> lst = ['a','b','c']
fz = frozenset(lst)
print(fz,type(fz)) #frozenset({'a', 'b', 'c'}) <class 'frozenset'> #只能做交叉并补
fz1 = frozenset(['a','b','c'])
fz2 = frozenset(['a','b','c','d'])
res = fz1 & fz2
print(res) ##frozenset({'c', 'b', 'a'}) 里面元素顺序会变化
res = fz2 - fz1
print(res) ##frozenset({'d'}) #不能再冰冻集合中做任何修改原数据的操作
#fz1.add('s') #error
7.文件操作
#打开模式
w write 写入模式
文件不存在则创建,存在的话则打开清空内容,并且将文件指针放在文件的开头 r read 读取模式
文件不存在则报错。存在的话则打开文件,并且将文件指针放在文件的开头
a append 追加模式
文件不存在则创建文件,存在的话则打开文件,并且将文件指针放在文件的末尾
x xor 异或模式
文件已存在则报错 不存在的话则创建文件,将文件指针放在文件的开头 #拓展模式(配合打开模式的辅助模式,自己单独不使用)
+ plus 增强模式(可以让文件具有读写功能)
b bytes bytes模式(二进制字节流) #模式一共16中
w,w+,wb,wb+
r,r+,rb,rb+
a,a+,ab,ab+
x,x+,xb,xb+ #将字符串和字节流(bytes)类型进行转换(参数写成转换的字符编码格式)
#encode 将字符串转换成对应的二进制字节流
#decode 将字节流转换成字符串 语法:三步骤
#写入文件
1.打开文件
fp = open('文件名或路径','模式','字符编码集')
2.写入文件
fp,write(写入的内容)
3.关闭文件
fp.close() #读取文件
1.打开文件
fp = open('文件名或路径','模式','字符编码集')
2.读取文件内容
res = fp.read()
3.关闭文件
fp.close()
总结:今天主要讲了列表相关函数的操作,深浅拷贝,字典的相关函数,集合中的交叉并补,集合中的相关函数,冰冻集合,文件的操作。
列表函数一共有以下几个:
# 改
append() 向列表的末尾添加新的元素
insert() 在指定索引之前插入元素
extend() 迭代追加所有元素
#删
pop() 指定索引删除元素,没有索引则默认删除最后一个元素
remove() 通过给与的值删除,如有多个相同元素,默认删除第一个
clear() 清空列表
#查
index() 获取某个值在列表中的索引
#计数
count() 计算某个元素出现的次数
#排序
sort() 列表排序默认从小到大,默认reverse = False
reverse() 列表反转
深浅拷贝:
浅拷贝:copy.copy(),只拷贝一级所有元素,一级元素改变,对应的copy过去的一级层级元素不变,是两个不同的地址。如果有二级层级元素,则沿用之前的。如果二级元素添加或删除一个元素,对应的copy过去的也会添加或删除同样的元素。
深拷贝:copy.deepcopy(),全部单独拷贝一份,其中不可变的数据类型暂时指向原数据,节省内存,可变的数据类型会单独开辟空间,如原数据二级层级改变的话,对应的拷贝过去的数据二级层级不会改变,因为是两个不同的内存空间。
字典函数:
#增
fromkeys() 可填两个参数,第一个参数为键(可填一组含有键的列表),第二个参数为值。 使用一组键和默认值创建字典,当值是可变的数据类型时,在可变的数据类型中添加数据,对应的其他键值对的值也会添加相应的值
#删
pop() 可填两个参数。第一参数为要删除的键,第二个参数可填返回的默认值。通过键去删除对应的键值对(若没有该键可设置默认值 预防报错)
popitem() 删除最后一个键值对,删除的键值对以元组的形式返回
clear() 清空字典
#改
update() 批量更新(有该键就更新 没有该键就添加)
#查
get() 可填两个参数,第一个参数为要获取的键,第二个参数为返回的默认值。通过键获取值(如没有该键可设置默认值 预防报错)
键和值以及键值对的获取:
keys() 将字典的键组成新的可迭代对象,可用for循环取值
values() 将字典中的值组成新的可迭代对象,可用fot循环取值
items() 将字典的键值对凑成一个个元组,组成新的可迭代对象,可用for循环取值
集合的相关操作:
intersection() 交集,共有的 简写 &
difference() 差集 我有的你没有,注意一下集合的前后顺序。简写 -
union() 并集 两个集合所有的元素包括共有的。简写 |
symmetric() 对称差集。除了交集以外的所有元素。简写 ^
issubset() 判断是否是子集、简写 <
issuperset() 判断是否是父集 >
isdisjoint() 检查两集合是否不相交。不相交返回True,相交返回False
集合的相关函数:
#增
add() 向集合增加数据
update() 迭代添加
#删
clear() 清空集合
pop() 随机删除集合中的一个数据
discard() 删除集合中指定的值,不存在的不删除。
remove() 删除集合中指定的值,不存在则报错。
冰冻集合:
frozenset() 只能用来做交叉并补,不能添加和删除。
文件操作:
open() 第一个参数为文件名或文件名所在路径,第二个参数打开模式,第三个参数字符编码集
以w模式写入文件步骤,打开文件,写入内容,关闭文件,以写模式打开文件时,文件不存在时会自动新建文件。
另外如果文件已经创建且有内容时,用写模式打开时,会清空文件内容,这边要注意。
以r模式读取文件步骤,打开文件,读取内容,关闭文件。
二进制字节流bytes,用来传输或存储数据,字符串和字节流之间的转换。
encode(字符编码格式) 编码,将字符串转换为字节流
decode(字符编码格式) 解码,将字节流转换为字符串
字节流的写入和读取分别用wb模式和rb模式,字节流模式下,不需要指定编码集
列表相关函数,深浅拷贝,字典相关函数,集合相关操作及文件操作---day08的更多相关文章
- day8:列表相关函数&深浅拷贝&字典相关函数&集合相关操作/函数
字符串/列表/字典/集合 目录 字符串相关操作: 拼接 重复 跨行拼接 索引 切片字符串相关函数:常规11+is系列3+填充去除6+最重要3字符串拓展:字符串的格式化format 列表的相关操作:拼接 ...
- Python中列表、元组、字典、集合与字符串,相关函数,持续更新中……
本篇博客为博主第一次学 Python 所做的笔记(希望读者能够少点浮躁,认真阅读,平心静气学习!) 补充: 列表.元组和字符串共同属性: 属于有序序列,其中的元素有严格的先后顺序 都支持双向索引,索引 ...
- python03-break、continue、for循环、数据bytes类型、字符串与字节的关系、变量指向与深浅拷贝、set集合、文件操作
目录: 1.break.continue 2.for循环 3.数据bytes类型 4.字符串与字节的关系 5.变量指向与深浅拷贝 6.set集合 7.文件操作 一.break.continue bre ...
- Python黑帽编程2.3 字符串、列表、元组、字典和集合
Python黑帽编程2.3 字符串.列表.元组.字典和集合 本节要介绍的是Python里面常用的几种数据结构.通常情况下,声明一个变量只保存一个值是远远不够的,我们需要将一组或多组数据进行存储.查询 ...
- python基础知识3——基本的数据类型2——列表,元组,字典,集合
磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 一.列表 1.列 ...
- 菜鸟学IT之python3关于列表,元组,字典,集合浅认识!
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2753 一.列表,元组,字典,集合分别如何增删改查及遍历. 列表 # 列表的 ...
- python_列表、元组、字典、集合对比
列表.元组.字典.集合 列表.元组.字典.集合对比 比较项 列表 元组 字典 集合 类型名称 list tuple dict set 定界符 [] () {} {} 是否可变 是 否 是 是 是否有序 ...
- Python 学习笔记(1)Python容器:列表、元组、字典与集合
Python容器:列表.元组.字典与集合 列表: 1.列表 的创建 使用[ ] 或者 list()创建列表:empty_list = [ ] 或者 empty_list= list() 使用list( ...
- Python中列表,元组,字典,集合的区别
参考文档https://blog.csdn.net/Yeoman92/article/details/56289287 理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是p ...
- python列表,元组,字典,集合的比较总结
这四个都是python中的序列,用于存放数据,他们区别总结如下: 列表list 元组tuple 字典dictionary 集合set 是否可变 可变 不可变 可变 可变 是否有序 有序 有序 无序 ...
随机推荐
- [转帖]金仓数据库KingbaseES V8R6 索引膨胀
索引膨胀 对于索引,随着业务不断的增删改,会造成膨胀,尤其Btree索引,也会涉及索引分裂.合并等,导致索引访问效率降低.维护成本增加.另外,索引页的复用与HEAP PAGE不一样,因为索引的内容是有 ...
- 【转帖】linux 内核分析工具 Dtrace、SystemTap、火焰图、crash等
<< System语言详解 >> 关于 SystemTap 的书. 我们在分析各种系统异常和故障的时候,通常会用到 pstack(jstack) /pldd/ lsof/ tc ...
- pytest-logging打印日志
这里就不多介绍了,直接copy代码 日志等级分为下面五种 debug 详细信息,调试问题时使用 info 事情按预期工作 warning 警告问题 error 严重的问题,软件不能执行一些功能 cri ...
- 像elementui一样封装自定义按钮
<template> <div> <button @click.prevent="coverHandler" class="btn-btn& ...
- 初试高云FPGA
前言 之前一直眼馋Sipeed的Tang系列,正好遇到有工程需要高速控制并行总线,就买了NANO 9K和Primer 20K试试水 买回来先拆的贵的20k,结果发现Sipeed设计师有奇怪的脑回路: ...
- TienChin 渠道管理-更新渠道接口开发
ChannelController /** * 修改渠道 */ @PreAuthorize("hasPermission('tienchin:channel:edit')") @L ...
- python中--try except 异常捕获以及正则化、替换异常值
1.异常处理过程 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exceptio ...
- 4.1 C/C++ 使用结构与指针
C/C++语言是一种通用的编程语言,具有高效.灵活和可移植等特点.C语言主要用于系统编程,如操作系统.编译器.数据库等:C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统.图形用户界面 ...
- 配置VSFTP文件服务器
FTP 文件传输协议.用于互联网上的控制文件的双向传输,使用FTP来传输时,其实是具有一定程度的危险性,因为数据在因特网上面是完全没有受到保护的明文传输方式,VSFTP是一个基于GPL发布的类Unix ...
- C/C++ 监控磁盘与目录操作
遍历磁盘容量: #include <stdio.h> #include <Windows.h> void GetDrivesType(const char* lpRootPat ...