1昨日内容回顾
小数据池: int -5~256 str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符 unicode 32位 4个字节 表示一个字符 utf- 8 1个英文 8位,1个字节 欧洲 16位 两个字节 表示一个字符 亚洲 24位 三个字节 表示一个字符 gbk 1个英文 8位,1个字节 亚洲 16位 两个字节 表示一个字符 s = 'alex' b = s.encode('utf-8') print(b) # b'alex' 1,基础数据类型汇总补充 str int list 在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错。 bool dict 1,fromkeys() tuple 2,集合set 3,深浅copy
2 基础数据类型汇总
字符串 列表
#str print(''.isspace()) #list lis=[11,22,33,44,55] for i in range(len(lis)): print(i,lis[i]) ###i=lis的索引值 # del lis[i] #循环列表时删除元素时 索引值会改变,从而报错 1[22, 44, 55]2[22, 44]3 <<< False 0 11 1 22 2 33 3 44 4 55
lis=[11,22,33,44,55] # 打印出lis中的奇数的三种方法: # 第一种 #按切片取值 lis=lis[::2] print(" ") print(lis) # 第二种 添加到一个新列表里面 lis=[11,22,33,44,55] li=[] for i in lis: #i是list里面的元素 注意和range区分 if lis.index(i)%2!=1: li.append(i) lis=li print(lis) # 第三种 #反向删除列表中的元素 lis=[11,22,33,44,55] for i in range(len(lis)-1,-1,-1): #删除列表的元素要想索引值不改变 可以反向删除 # for i in range(len(lis)): if i%2==1: # print(i) del lis[i] # print(lis) print(lis) <<< [11, 33, 55] [11, 33, 55] [11, 33, 55]
字典
# dic dic=dict.fromkeys(range(1,4),"春哥") #keys必须是可迭代对象(序列) eg:字符串 列表 元祖 range print(dic) dic=dict.fromkeys(range(1,4),[]) dic[1].append("园姐") #只有列表有append的方法 print(dic) dic[2].append("二哥") print(dic) #循环时不能删除字典 会报错 1 #创建一个空字典 dic={'k1':"v1",'k2':"v2","a3":"v3"} dic1={} for i in dic: if "k" in i: dic1.setdefault(i,dic[i]) dic=dic1 print(dic) # 2把字典中的元素放到一个空列表 再对空列表循环 dic={'k1':"v1",'k2':"v2","a3":"v3"} l=[] for i in dic: if "k" not in i: l.append(i) for i in l: del dic[i] print(dic) <<< {1: '春哥', 2: '春哥', 3: '春哥'} {1: ['园姐'], 2: ['园姐'], 3: ['园姐']} {1: ['园姐', '二哥'], 2: ['园姐', '二哥'], 3: ['园姐', '二哥']} {'k1': 'v1', 'k2': 'v2'} {'k1': 'v1', 'k2': 'v2'}
元祖
tu1=([1],) tu2=([1]) print(tu1,tu2,type(tu1),type(tu2)) <<< ([1],) [1] <class 'tuple'> <class 'list'>
集合
#集合:可变的数据类型,它里面的元素必须是不可变的数据类型,无序,不重复 set1={'alex','wusir','ritian','egon','barry'} set2=set({1,2,3}) print(set1,set2,type(set1),type(set2)) #增 set1.add('女神') set1.update('abc') print(set1) #删 set2={'alex','wusir','ritian','egon','barry'} print(set2.pop())#随机删除 有返回值 print(set2) print(set2.remove('alex')) #按元素删除 返回None print(set2) print(set2.clear()) #清空clear 返回None,清空完原集合成为空集 set() 不是{}(与字典区分) print(set2) del set2 #删除集合 #查 set3={'alex','wusir','ritian','egon','barry'} for i in set3: #无序返回集合的每一个元素 print(i) #集合的交并 set1={1,2,3,4,5} set2={4,5,6,7,8} print(set1 & set2) #交集 print(set1.intersection(set2)) print(set1 | set2) #并集 print(set1.union(set2)) print(set1^set2) #反交集 并集减去交集 print(set1.symmetric_difference(set2)) print(set1-set2) #set1独有的 print(set1.difference(set2)) #比较集合 set1={1,2,3} set2={1,2,3,4,5,6} print(set1<set2) print(set1.issubset(set2)) #set1是set2的子集 print(set2>set1) print(set2.issuperset(set1)) #集合set2是1的超集 #去重 li=[1,2,33,33,4,6,6,8,8,9,9,9] set4=set(li) #把列表转换成集合 print(set4) li=list(set4) print(li) s=frozenset('barry') # frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。 for i in s: #没有add,pop等操作 print(i) <<< {'ritian', 'barry', 'alex', 'wusir', 'egon'} {1, 2, 3} <class 'set'> <class 'set'> {'ritian', 'barry', 'alex', '女神', 'c', 'a', 'wusir', 'egon', 'b'} ritian {'barry', 'alex', 'wusir', 'egon'} None {'barry', 'wusir', 'egon'} None set() ritian barry alex wusir egon {4, 5} {4, 5} {1, 2, 3, 4, 5, 6, 7, 8} {1, 2, 3, 4, 5, 6, 7, 8} {1, 2, 3, 6, 7, 8} {1, 2, 3, 6, 7, 8} {1, 2, 3} {1, 2, 3} True True True True {1, 2, 33, 4, 6, 8, 9} [1, 2, 33, 4, 6, 8, 9] b y r a
深浅copy
'''直接赋值:其实就是对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。''' #深浅copy #赋值 l1=[] l2=l1 l3=l1 l3.append("a") print(l1,l2,l3,id(l1),id(l2),id(l3)) #copy 浅拷贝 l1=[1,2,[4,5,6],3] l2=l1.copy() print(l1,l2,id(l1),id(l2)) l1.append('a') print(l1,l2,id(l1),id(l2)) #第一层地址不相同 第一层l2不会随l1改变 l1[2].append('a') print(l1,l2,id(l1),id(l2)) print(id(l1[2]),id(l2[2])) #重点 第二层地址及以上地址相同 import copy l1=[1,2,[4,5,6],3] l2=copy.deepcopy(l1) print(l1,l2,id(l1),id(l2)) l1[2].append('a') print(l1,l2,id(l1),id(l2)) print(id(l1[2]),id(l2[2])) #深拷贝与浅拷贝的区别是 不管多少层 俩个列表完全独立 l1=[1,[1],2,3,4] l2=l1[:] #也是浅拷贝 相当于l2=l1.copy() print(l1,l2,id(l1),id(l2)) l1[1].append('a') print(l1,l2,id(l1[1]),id(l2[1]))
<<< ['a'] ['a'] ['a'] 1927665312328 1927665312328 1927665312328 [1, 2, [4, 5, 6], 3] [1, 2, [4, 5, 6], 3] 1927696924744 1927696884808 [1, 2, [4, 5, 6], 3, 'a'] [1, 2, [4, 5, 6], 3] 1927696924744 1927696884808 [1, 2, [4, 5, 6, 'a'], 3, 'a'] [1, 2, [4, 5, 6, 'a'], 3] 1927696924744 1927696884808 1927697092360 1927697092360 [1, 2, [4, 5, 6], 3] [1, 2, [4, 5, 6], 3] 1927697037384 1927696924744 [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6], 3] 1927697037384 1927696924744 1927697038792 1927697037192 [1, [1], 2, 3, 4] [1, [1], 2, 3, 4] 1927697092360 1927697037384 [1, [1, 'a'], 2, 3, 4] [1, [1, 'a'], 2, 3, 4] 1927696884808 1927696884808
l1=['alex','taibai','wusir','egon'] for i in l1: print(l1.index(i),i) for index,i in enumerate(l1,1): print(index,i) <<< 0 alex 1 taibai 2 wusir 3 egon 1 alex 2 taibai 3 wusir 4 egon
-
直接赋值:其实就是对象的引用(别名)。
-
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
-
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。