一、数据类型补充
1.str:.isspace()字符串是空格或至少是一个空格。
s='alex' s1=' ' ret=s1.isspace() print(ret)
执行结果:True
2.tul: 对于元组如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型。
tu=(1) tu1=(1,) print(tu,type(tu)) print(tu1,type(tu1)) 执行结果: 1 <class 'int'> (1,) <class 'tuple'>
3.list:在循环一个列表示,最好不要进行删除的动作,一旦删除索引会随之变化,容易出错(如果一定要删除可以倒着删)。
例:将索引为奇数的元素删除
#方法1通过循环查找索引为偶数的元素添加到新的list li = ['老男孩', 'python', 'alex', 'wusir', 'egon', 'ritian', '女神'] l1=[] for i in range(len(li)): if i % 2==0: l1.append(li[i]) li=l1 print(li) 执行结果:['老男孩', 'alex', 'egon', '女神']
#方法2直接切片删除 li = ['老男孩', 'python', 'alex', 'wusir', 'egon', 'ritian', '女神'] del li[1::2] print(li) 执行结果:['老男孩', 'alex', 'egon', '女神']
#方法3通过循环倒着删除 li = ['老男孩', 'python', 'alex', 'wusir', 'egon', 'ritian', '女神'] for i in range(len(li)-1,-1,-1): if i % 2==1: del li[i] print(li) 执行结果:['老男孩', 'alex', 'egon', '女神']
4.dict : dict.fromkeys('可迭代对象',‘值’)
dic=dict.fromkeys('abc','alex') print(dic) 执行结果: {'a': 'alex', 'b': 'alex', 'c': 'alex'}
dic=dict.fromkeys([1,2,3],[]) print(dic) dic[1].append('老男孩') print(dic) 执行结果: {1: [], 2: [], 3: []} {1: ['老男孩'], 2: ['老男孩'], 3: ['老男孩']}
在循环字典时不能改变字典的大小,不能增加或删除此字典的键值对。
例:将字典中含有k元素的键对应的键值对删除
dic = {'k1':'value1','k2':'value2','name':'wusir'} for i in dic: if 'k' in i: del dic[i] 执行结果:报错
l1=[] #添加到一个列表中进行删除 for i in dic: if 'k' in i: l1.append(i) for i in l1: del dic[i] print(dic) 执行结果: {'name': 'wusir'}
5.数据类型转换
tuple---->list list(tu)
tu=(1,2,3) li=list(tu) print(li) 执行结果: [1, 2, 3]
list---->tuple tuple(li)
l1=[1,2,3] tul=tuple(l1) print(tul) 执行结果: (1, 2, 3)
#0、''、[]、()、{} 空字符串、列表、元组、字典转化为bool都为False
二、set集合
集合是不重复的、无序的,它里面的元素是可哈希的,它本身是不和哈希的,不能作为字典的key。
集合的作用:
1.去重
把一个列表变成集合就自动去重了
li=[11,11,22,22,33,33,33,44] li=list(set(li)) print(li) 执行结果: [33, 11, 44, 22]
2.数据关系测试,测试两组数据之前的交集、差集、并集等关系。
1)集合的增:
1. set.add(' ')
set1 = {'alex','wusir','ritian','egon','barry'} set1.add('女神') print(set1) 执行结果: {'alex', 'ritian', 'barry', '女神', 'egon', 'wusir'}
2.set.update([1,2,3]) 迭代增加
set1 = {'alex','wusir','ritian','egon','barry'} set1.update([1,2,3]) print(set1) 执行结果: {1, 2, 3, 'wusir', 'barry', 'alex', 'egon', 'ritian'}
2)集合的删
1.Set.remove(‘元素’)
set1 = {'alex','wusir','ritian','egon','barry'} set1.remove('alex') print(set1) 执行结果: {'wusir', 'egon', 'barry', 'ritian'}
2.set.pop()随机删除
3.set.clear() set()空集合
4.del set 删除集合
3)集合的查
for循环查
set1 = {'alex','wusir','ritian','egon','barry'} for i in set1: print(i) 执行结果: ritian wusir barry egon alex
4)集合的其他操作
1.交集 &和set.intersection()
set1={1,2,3,4,5} set2={4,5,6,7,8} print(set1 & set2) print(set1.intersection(set2)) 执行结果: {4, 5} {4, 5}
2.反交集 ^和set.symmetric_difference()
set1={1,2,3,4,5} set2={4,5,6,7,8} print(set1 ^ set2) print(set1.symmetric_difference(set2)) 执行结果: {1, 2, 3, 6, 7, 8} {1, 2, 3, 6, 7, 8}
3.并集 |和set.union()
set1={1,2,3,4,5} set2={4,5,6,7,8} print(set1 | set2) print(set1.union(set2)) 执行结果: {1, 2, 3, 4, 5, 6, 7, 8} {1, 2, 3, 4, 5, 6, 7, 8}
4.差集 set1-set2
set1={1,2,3,4,5} set2={4,5,6,7,8} print(set1-set2) 执行结果: {1, 2, 3}
5.子集 set.issubset()
set1={1,2,3} set2={1,2,3,4,5,6} print(set1.issubset(set2)) 执行结果: True
6.超集 set.issuperset()
set1={1,2,3} set2={1,2,3,4,5,6} print(set2.issuperset(set2)) 执行结果: True
三、深浅copy
1.赋值运算:对于赋值运算指向的是同一内存地址,dict、list、set都是一样的。
l1=[1,2,3] l2=l1 l2.append(111) print(l1,l2) 执行结果: [1, 2, 3, 111] [1, 2, 3, 111]
2.浅copy:不是指向一个,而是又开辟了一个存储空间,对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以对于第二层以及更深的层数来说,保持一致性。
l1=[1,2,3] l2=l1.copy() l1.append(111) print(l1,l2) 执行结果: [1, 2, 3, 111] [1, 2, 3]
l1=[1,2,3,['guo','li']] l2=l1.copy() print(l1,id(l1)) print(l2,id(l2)) 执行结果: [1, 2, 3, ['guo', 'li']] 427213865032 [1, 2, 3, ['guo', 'li']] 427213868744
l1=[1,2,3,['guo','li']] l2=l1.copy() l1[3][0]='wu' print(l1,id(l1[3])) #[1, 2, 3, ['wu', 'li']] 769433489352 print(l2,id(l2[3])) #[1, 2, 3, ['wu', 'li']] 769433489352
3.深copy deep.copy:对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
import copy l1=[1,2,[1,2,3],4] l2=copy.deepcopy(l1) l1[2].append(666) print(l1,id(l1[2])) #[1, 2, [1, 2, 3, 666], 4] 893847315656 print(l2,id(l2[2])) #[1, 2, [1, 2, 3], 4] 893847281352
4.切片浅copy
l1=[1,2,3,[22,33]] l2=l1[:] l1[3].append(666) print(l2) #[1, 2, 3, [22, 33, 666]]