一.补充基础数据类型的相关
1.str的相关操作 join()
例:
s='abc'
s1=s.join("非常可乐")
print(s1) ==<非abc常abc可abc乐>
例:
s='_'.join(['非','常','可','乐'])
print(s) ==<非_常_可_乐>
join可以把列表变成字符串
split可以把字符串变成列表
2.list列表
list在循环的时候不能删除,因为会改变索引.
例:
lst=["周杰伦","周润发","周星星","马化腾","周树人"]
for el in lst:
lst.remove(el)
print(lst) ==<['周润发', '马化腾']>
例:
lst=["周杰伦","周润发","周星星","马化腾","周树人"]
del_lst=[]
for el in lst:
if el[0]=="周":
del_lst.append(el)
for el in del_lst: #循环记录的内容
lst.remove(el) #删除原列表的内容
print(lst) ==<['马化腾']>
3.dict字典
dict中的元素在迭代循环的过程中不能执行新增和删除操作.
formkeys 需要一个静态字典,执行fromkeys命令后返回一个新字典和上面定义的字典没有关系.
例:
dict={}
a=dict. fromkeys(['A','B','C'],'ab')
print(a) ==<{'A': 'ab', 'B': 'ab', 'C': 'ab'}>
二.set集合 特点:去重
set中的元素是不重复的,无序的里面的元素必须是可哈希的(int,str,tuple,bool).
例:
s={'王者荣耀','英雄联盟','王者荣耀',123,True,True}
print(s) ==<{'英雄联盟', True, '王者荣耀', 123}>
(1)增:add() update()
(2)删:pop()随机删除 remove()直接删除 clear()清空
(3)改:先删后增
(4)查:可迭代 for el in set:
set集合本身是可以发生改变的,是不可哈希的.我们可以使用frozenset来保存数据.frozenset是不可变的.也就是一个可哈希的数据类型.
例:
frozenset([1,3,6,6,9,8])
ss={'a',s}
print(ss) ==<{'a', frozenset({1, 3, 6, 8, 9})}>
三.深浅拷贝
字典,列表进行赋值操作,实际上是引用内存地址的赋值.内存中只有一个列表,两个变量指向一个列表.
例:
lst=["周杰伦","周润发","周星星",]
lst1=lst #赋值内存地址一样
lst.append("周树人")
print(lst,lst1) ==<['周杰伦', '周润发', '周星星', '周树人'] ['周杰伦', '周润发', '周星星', '周树人']>
1.浅拷贝 copy 只拷贝第一层
例:
lst=["周杰伦","周润发","周星星",]
lst2=lst.copy() == lst2=lst[:]
lst.append("周树人")
print(lst,lst2) ==<['周杰伦', '周润发', '周星星', '周树人'] ['周杰伦', '周润发', '周星星']>
print(id(lst),id(lst2)) ==<1991369433864 1991369433800>
2.深拷贝 deepcopy 深度拷贝包括内部的所有内容进行拷贝
例:
lst1=['A','B','C',['a','b','c']]
lst2=lst1.copy()
lst1[3].append("d")
print(lst1,lst2) lst1[3]和lst2[3]的内存地址相同
==<['A', 'B', 'C', ['a', 'b', 'c', 'd']] ['A', 'B', 'C', ['a', 'b', 'c', 'd']]>
例:
import copy
lst1=['A','B','C',['a','b','c']]
lst2=copy.deepcopy(lst1)
lst1[3].append("d")
print(lst1,lst2) ==<['A', 'B', 'C', ['a', 'b', 'c', 'd']] ['A', 'B', 'C', ['a', 'b', 'c']]>
拷贝比创建对象的过程快.