day07 python列表 集合 深浅拷贝
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了day07 python列表 集合 深浅拷贝,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3802字,纯文字阅读大概需要6分钟。
内容图文
![day07 python列表 集合 深浅拷贝](/upload/InfoBanner/zyjiaocheng/649/64078749128043cda66dce9172079e08.jpg)
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列表 集合 深浅拷贝全部内容,希望文章能够帮你解决day07 python列表 集合 深浅拷贝所遇到的程序开发问题。
如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
来源:【匿名】