1、基础数据类型的补充。
1,元组
tu1 = ('laonanhai') tu2 = ('laonanhai',) print(tu1, type(tu1)) print(tu2, type(tu2)) tu1 = (1) tu2 = (1,) print(tu1, type(tu1)) print(tu2, type(tu2)) 元组里面如果只有一个元素且没有逗号,则该数据的数据类型与里面的元素相同。 tu1 = ([1, 2, 3]) tu2 = ([1, 2, 3],) print(tu1, type(tu1)) print(tu2, type(tu2)) list l1 = [111, 222, 333, 444, 555, ] 索引为奇数对应的所有元素全部删除。 方法一: del l1[1::2] print(l1) 方法二错误展示: for index in range(len(l1)): print('删除之前的index:%s' % index) print('删除之前的l1:%s' % l1) if index % 2 == 1: del l1[index] print('删除之后的index:%s' % index) print('删除之后的l1:%s' % l1) print(l1) 在循环一个列表时,最好不要改变列表的大小,会影响你的最终结果。 倒着删除。 for index in range(len(l1)-1, -1, -1): if index % 2 == 1: del l1[index] print(l1) dict dic = dict.fromkeys('abc',666) print(dic) dic = dict.fromkeys([11,22,33],666) print(dic) dic = dict.fromkeys([1,2,3],[]) dic[1].append(666) print(dic) 在循环dict中,最好不要改变dict的大小,会影响结果或者报错。 dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3','name': 'alex'} for i in dic: if 'k' in i: del dic[i] l1 = [] for key in dic: if 'k' in key: l1.append(key) # print(l1) for key in l1: del dic[key] print(dic) 数据类型的转换: str ---> list split list --> str join tuple ---> list tu1 = (1, 2, 3) l1 = list(tu1) print(l1) tu2 = tuple(l1) print(tu2) dic ----> list list(dic)(列表中的元素只有key) dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3',} l1 = list(dic) print(l1) print(list(dic.keys())) print(list(dic.values())) print(list(dic.items())) 0, '', [], () {} ---> bool 都是Fasle print(bool([0, 0, 0]))
2、基础数据类型 set。
集合是一个可变的数据类型,他是以{}形式存在的,空集合set(),
但是它要求它里面的元素是不可变的,集合是无序的,不重复的。
1,去重。
2,关系测试。
set1 = {1, 2, 3, 'abc', (1,2,3), True, } print(set1) set2 = {11, 11, 11, 22} print(set2) 列表的去重 l1 = [11, 11, 22, 22, 33, 33, 33, 44] l2 = list(set(l1)) l2.sort() print(l2) set1 = {'alex', 'WuSir', 'RiTiAn', 'egon', 'barry'} 增 set1.add('太白') print(set1) set1.update('abc') set1.update([111, 2222, 333]) print(set1) 删 remove按元素删除 set1.remove('RiTiAn') print(set1) 随机删除,有返回值 pop print(set1.pop()) print(set1) 清空clear set1.clear() print(set1) 删除整体 del del set1 print(set1) # 查 for i in set1: print(i) set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} 交集 & intersetion set3 = set1 & set2 print(set3) print(set1.intersection(set2)) 并集 | union print(set1 | set2) print(set1.union(set2)) 差集 - difference print(set1 - set2) # set1 独有 print(set2.difference(set1)) # set2 独有 反交集 ^ symmetric_difference print(set1 ^ set2) print(set1.symmetric_difference(set2)) set1 = {1, 2, 3} set2 = {1, 2, 3, 4, 5, 6} print(set1 < set2) # True set1 是set2的子集 print(set1.issubset(set2)) # True set1 是set2的子集 print(set2 > set1) # True set2 是set1的超集 print(set2.issuperset(set1)) # True set2 是set1的超集 set1 = frozenset({1, 2, 3, 'alex'}) print(set1,type(set1))
04,深浅copy。
l1 = [1, 2, 3]
l2 = l1 l3 = l2 l3.append(666) print(l1, l2, l3) 对于赋值运算来说,指向的都是同一个内存地址,一变都变。 深浅copy 浅copy l1 = [11, 22, 33] l2 = l1.copy() l1.append(666) print(l1, id(l1)) print(l2, id(l2)) l1 = [11, 22, ['barry', [55, 66]], [11, 22]] l2 = l1.copy() l1[2].append('alex') print(l1,id(l1)) print(l2,id(l2)) print(l1, id(l1[-1])) print(l2, id(l2[-1])) 对于浅copy来说,对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始 ,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。 深copy import copy l1 = [11, 22, 33] l2 = copy.deepcopy(l1) l1.append(666) print(l1, id(l1)) print(l2, id(l2)) l1 = [11, 22, ['barry']] l2 = copy.deepcopy(l1) l1[2].append('alex') print(l1, id(l1[-1])) print(l2, id(l2[-1])) 深copy 完全独立。 s1 = 'alex' s2 = 'alex' l1 = [1, 2, 3] l2 = [1, 2, 3] l1.append(666) print(l1, l2) 对于切片来说,这是浅copy。 l1 = [1, 2, 3, 4, 5, 6, [11,22]] l2 = l1[:] l1.append(666) print(l1, l2) l1[-1].append(666) print(l1, l2)