昨日内容回顾
小数据池: 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
今日代码练习
# 列表值偶数位的两种方式 # 第一种 lis = lis[::2] print(lis) # 第二种 l1 = [] for i in lis: if lis.index(i) % 2 == 0: l1.append(i) lis = l1 print(lis) # 快速创建字典 """ Returns a new dict with keys from iterable and values equal to value. """ dic = dict.fromkeys('alex', '春哥') print(dic) dic = dict.fromkeys([1, 2, 3], []) print(dic) # {1: [], 2: [], 3: []} dic[1].append('袁姐') print(dic) dic[2].extend('二哥') print(dic) # 浅copy l1 = [] l2 = l1 l3 = l1 l3.append('a') print(l1, l2, l3) # 删除字典中键值对的两种方法 dic = {'k1': 'v1', 'k2': 'v2', 'a3': 'v3'} dic1 = {} for i in dic: if 'k' not in i: dic1.setdefault(i, dic[i]) dic = dic1 print(dic) l = [] for i in dic: if 'k' in i: l.append(i) for i in l: del dic[i] print(dic) # 转化成bool值为False # 0 # ''[]() # {} # set() # 元祖 # 如果元祖里面只有一个元素且不加逗号那此元素是什么类型,就是什么类型。 tu1 = (1) tu2 = (1,) print(tu1, type(tu1)) print(tu2, type(tu2)) tu1 = ([1]) tu2 = ([1],) print(tu1, type(tu1)) print(tu2, type(tu2)) dic = dict.fromkeys([1, 2, 3], 3) dic[1] = 4 print(dic)
集合代码练习
''' 集合:可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复。 {} ''' #集合的创建 # set1 = set({1, 2, 'barry'}) # set2 = {1, 2, 'barry'} # print(set1, set2) # {1, 2, 'barry'} {1, 2, 'barry'} #集合的增,删 #增 add() update()迭代的增加 set1 = {'alex','wusir','wusir','taibai','yuanhao'} # set1.add('peiqi') # print(set1) # set1.update('中国') # print(set1) #删除 pop()随机删除有返回值, remove()按元素删除,clear() # print(set1.pop()) # print(set1) # set1.remove('alex') # print(set1) # set1.clear() # print(set1) #set() #查询 # for i in set1: # print(i) #集合的方法 #求交集 # a = {1,2,3,4,5} # b = {4,5,6,7,8} # print(a & b) # print(a.intersection(b)) #求反交集 # print(a ^ b) # print(a.symmetric_difference(b)) #求并集 # print(a | b) # print(a.union(b)) #求差集,就是谁独有的 # print(a - b) # print(a.difference(b)) #求子集与超集 # a = {1,2,3} # b = {1,2,3,4,5,6} # print(a <b) # print(a.issubset(b)) # 这两个相同,都是说明set1是set2子集。 # # print(b > a) # print(b.issuperset(a)) # 这两个相同,都是说明set2是set1超集。 #让集合变成不可变类型,可查询 # s = frozenset('barry') # print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'> # for i in s: # print(i)
深浅copy
#深浅copy #赋值运算 # l1=[1,2,3,['alex','barry']] # l2=l1 # l1[0]=111 # print(l1,l2) # l1[3][0]='wusir' # print(l1,l2) #对于赋值运算来说,l1与l2指向的是同一个内存地址,所以它们是完全一样的 #浅拷贝copy() # l1=[1,2,3,['alex','barry']] # l2=l1.copy() # print(l1,id(l1)) # print(l2,id(l2)) # l1[0]=111 # print(l1,id(l1)) # print(l2,id(l2)) # # l1[3][0]='wusir' # print(l1,id(l1[3])) # print(l2,id(l2[3]))#对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址, # 所以,对于第二层以及更深的层数来说,保持一致性 #深copy # import copy # l1= [1,2,3,['alex','barry']] # l2 = copy.deepcopy(l1) # print(l1,id(l1)) # print(l2,id(l2)) # l1[0]=111 # print(l1,id(l1)) # print(l2,id(l2)) # # l1[3][0]='wusir' # print(l1,id(l1[3])) # print(l2,id(l2[3]))#对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变