目录
5.add元素必须是可哈希对象且update必须是可迭代对象
1)d.fromkeys(seq[,value])不会改变d1对象中的元素
2.若d1有元素,使用d1.fromkey()d1中元素清除
知识点1.可变对象和不可变对象
1.类型
可变类型:列表,字典
不可变类型:字符串,元组,数值
可变类型【可以对元素的值进行修改而不改变内存地址】
ls=[1,2,3]
print(id(ls))
ls[1]=5
print(id(ls))
>>4396867264
4396867264
可变类型即使定义的相同,地址也不同(列表和字典)
ls=[1,2,3]
print(id(ls))
ls=[1,2,3]
print(id(ls))
>>4531461888
4535166656
不可变类型即使再定义的相同,地址也不变
变量的赋值实际上是
知识2.元素截取和deepcopy
如何解决修改一个对象的元素值不影响另一个对象呢?
一.解决方法元素截取:
ls=[1,2,3]
ls1=ls[:]
ls[1]=5
print(ls)
print(ls1)
>>[1, 5, 3]
[1, 2, 3]
二.解决方法deepcopy:
但二维列表的元素修改不能使用元素截取,只能用deepcopy实现列表元素的复制
import copy
ls1=[1,[2,3]]
ls2=copy.deepcopy(ls1)
print(ls2)
ls1[1][0]=5
ls2[1][1]=9
print(ls1,ls2)
>>[1, [2, 3]]
[1, [5, 3]] [1, [2, 9]](逗号在print后面会变成空格)
知识点3.列表的查找、插入、删除
一.删除
- del ls[:]
- ls[:]=[]
ls=[0,1,2,3,4,5,6,7,8]
del ls[7]
print(ls)
del ls[0:3]
print(ls)
ls[0:1]=[]
print(ls)
>>[0, 1, 2, 3, 4, 5, 6, 8]
[3, 4, 5, 6, 8]
[4, 5, 6, 8]
二.查找
1.index只查找第一个出现的元素
ls=[0,1,3,4,3]
print(ls.index(3))
三.插入
1.append(添加的最后一个元素)
ls=[0,1,3,4,3]
ls.append(0)
print(ls)
2.insert(插入的位置,插入的元素)
ls=[0,1,3,4,3]
ls.insert(0,9)
print(ls)
>>[9, 0, 1, 3, 4, 3]
1.列表的最大元素和最小元素max(ls)
ls=[0,1,3,4,3]
print(max(ls))
2.列表某元素出现的次数ls.count(x)
ls=[0,1,3,4,3]
print(ls.count(3))
>>2
3.计算一个列表中的元素len(ls)
ls=[0,1,3,4,3]
print(len(ls))
知识点3.元组
1.列表变元组
tuple([])
t=tuple([1,'one','-'])
print(t[2])
2.创建单个元组
在唯一一个元素后面加,
t=(1)
print(type(t))
>><class 'int'>
知识点4.集合
1.集合的创建:
为和字典区分开,空集合创建只能使用set函数
2.列表换集合set([])
s=set([1,2,3])
print(s)
>>{1,2,3}
3.集合唯一性
s={1,2,3,4,3}
print(s)
>>{1,2,3,4}
4.add和update
1.add
插入新元素到集合中
2.update
将x拆分成多个元素在插入集合中,若之前就有x则把x加入拆新的x
s={1,2,3,4,3}
s.add('python')
print(s)
s.update('python')
print(s)
5.add元素必须是可哈希对象且update必须是可迭代对象
6.集合输出时无序
- 可哈希对象不是列表、集合、字典
- 可迭代对象可以是字符串、列表、元组
>>{'o', 1, 2, 3, 4, 'n', 't', 'h', 'y', 'p'}
7.集合的并集、交集、叉集、对称
1.交集
s1s2共有的
s1=set([1,2,3])
s2=set([2,3,4])
print(s1.intersection(s2))
2.并集
s1s2都有的
print(s1.union(s2))
3.叉集
s1有的,s2没有
print(s1.difference(s2))
4.对称
s1s2互相没有的
print(s1.symmetric_difference(s2))
5.子集
- issuperset 父集
- issubset 子集
s1=set([2,3])
s2=set([2,3,4])
print(s1.issubset(s2))
print(s1.issuperset(s2))
>>ture
false
知识点5.字典
键唯一且键必须为可哈希对象且无序
1.初始化字典
1)d.fromkeys(seq[,value])不会改变d1对象中的元素
seq包含了所有键名、默认None
d1={}.fromkeys(['one','two','three'])
print(d1)
>>{'one':none'two':none,'three':none}
d1={}.fromkeys(['one','two','three'],'true')
print(d1)
>>>>{'one':true'two':true,'three':true}
2)dict()创建字典
若只想输出值,则元素对象【键】即可(键要有双引号)
d1=dict(age=10)
print(d1['age'])
>10
3)创建新的对象:d1【‘键’】
d1['name']='zhu'
2.若d1有元素,使用d1.fromkey()d1中元素清除
3.update字典一次性插入多个元素和修改新的对象
d1=dict(age=10)
print(d1['age'])
d1.update(sno='123456')
print(d1)
d1=dict(age=10)
d1.update(age=18)
print(d1)
>>{'age':10,'sno':123456"}
['age':18]
4.删除
1)del
del后面跟着对象[键]
d1=dict(age=10,name='zhu')
print(d1)
del d1['age']
print(d1)
>>{name:'zhu'}
2)d.pop(key)
d1.pop('name')
print(d1)
>>{}
知识6.浅拷贝&深拷贝
一.浅拷贝
对字典d 进行浅拷贝d.copy()
使字典对象指向不同地址,但对于统一字典对象内元素却不具有相互独立的关系
d1={'age':10,'name':'zhu','score':{'python':100,'math':99}}
d2=d1
d3=d1.copy()
print(id(d2),id(d3))
>>4358334592 4358333952
- 元素键修改不会改变浅拷贝的对象
d1['age']=18
print(d3)
print(d2)
>>{'age': 10, 'name': 'zhu', 'score': {'python': 100, 'math': 99}}
{'age': 18, 'name': 'zhu', 'score': {'python': 100, 'math': 99}}
- 浅拷贝不会改变元素键值的地址
d1['score']['math']=66
print(d1)
print(d3)
>>{'age': 18, 'name': 'zhu', 'score': {'python': 100, 'math': 66}}
{'age': 10, 'name': 'zhu', 'score': {'python': 100, 'math': 66}}
二.深拷贝
二维字典的修改:可以改变元素键值的地址
import copy
copy.deepcopy()
import copy
d1={'age':10,'name':'zhu','score':{'python':100,'math':99}}
d2=copy.deepcopy(d1)
d1['score']['python']=110
print(d1)
print(d2)
>>{'age': 10, 'name': 'zhu', 'score': {'python': 110, 'math': 99}}
{'age': 10, 'name': 'zhu', 'score': {'python': 100, 'math': 99}}