enumerate 函数用于遍历序列中的元素以及它们的下标:
>>> for i,j in enumerate(('a','b','c')):
print i,j
0 a
1 b
2 c
>>> for i,j in enumerate([1,2,3]):
print i,j
0 1
1 2
2 3
>>> for i,j in enumerate({'a':1,'b':2}):
print i,j
0 a
1 b
>>> for i,j in enumerate('abc'):
print i,j
0 a
1 b
2 c
集合、有序字典、可命名元祖、计数
1 #!/usr/bin/env python3.5 2 # -*-coding:utf8-*- 3 # s1 = set() # 集合 是一个无序且不重复的元素集合 4 # s1.add("alex") 5 # print("s1") 6 # s1.add("alex") 7 # print("s1") 8 # set() # 访问速度快,天生解决了重复问题 # 用于爬虫等s2 = 9 # s2 = set(["alex", "eric", "tony"]) 10 #print(s2) 11 # s3 = s2.difference(["alex", "eric"]) # difference 没有改变原来的元数,生成了一个生的元素(集合) 12 # print(s3) 13 # # {'tony', 'alex', 'eric'} 14 # # {'tony'} 15 # s4 = s2.difference_update(["alex", "eric"]) # 不生成新的内容,而是改变原有集合的内容 ,删除当前SET中的所有包含在参数集合里的元素 16 # print(s2) 17 # print(s4) 18 # s5 = s2.intersection(["alex", "eric"]) # 新建一个取相同的部分 19 # print(s5) 20 # s6 = s2.intersection_update(["alex", "eric"]) # 更新原来的取相同部分 21 # print(s2) 22 23 # b = {"1":"2","2":5} 24 # c = {"1":"2","2":6} 25 # c.update(b) 26 # print(b) 27 # print(c) 28 29 # import collections 30 # obj = collections.Counter(["afad", "adfas"]) 31 # print(obj) # 字典 32 # obj.update(["afad", "ad2adf"]) # 更新计数 33 # print(obj) 34 # obj.subtract(["afad", "adfa"]) # 删除计数 35 # print(obj) 36 # ret = obj.most_common(4) 37 # print(ret) 38 # for k in obj.elements(): 39 # elements =>原生值 40 # print(k) # 循环取出从多到少的各个元素 41 # for k, v in obj.items(): 42 # print(k, v) # 取字典键与值 43 # import collections 44 # # 有序字典 45 # dic = collections.OrderedDict() 46 # dic['k1'] = 'v1' 47 # dic['k2'] = 'v2' 48 # dic['k3'] = 'v3' 49 # print(dic) 50 # dic.popitem() # 后进先出 51 # print(dic) 52 # dic.pop('k2') 53 # print(dic) 54 # help(collections.OrderedDict()) 55 # 内部用列表来维护有序字典 56 # dic = {"k1": []} 57 # dic["k1"].append("alex") 58 # import collections 59 # dic = collections.defaultdict(list) # 设置字典默认值为空列表 60 # dic["k1"].append("alex") 61 # print(dic) 62 63 # 可命名元祖 意思是 对元祖的元素命名 以后可以直接调名字 64 # import collections 65 # mytupleclass = collections.namedtuple('mytupleclass', ['x', 'y', 'z']) # 创建类等同于 defaultdict 66 # print(help(mytupleclass)) 67 # obj = mytupleclass(11, 22, 33) 68 # print(obj.x) 69 # print(obj.y) 70 # print(obj.z) 71 # # 主要用于坐标 72 73 # 队列 分双向队列与单向队列 74 # import collections 75 # d = collections.deque() # 创建双向队列 76 # d.append("1") 77 # d.append("10") 78 # d.append("1") 79 # d.append("10") 80 # r = d.count("1") 81 # # print(r) 82 # d.extend(["yy", "uu", "ii"]) 83 # d.appendleft("ad") 84 # d.appendleft("12") 85 # d.extendleft(["adf", "1111", "222"]) 86 # print(d) 87 # #print(help(d)) 88 89 # 单向队列FIFO 90 # 生产者消费者模型 91 # import queue 92 # q = queue.Queue() # 创建单向队列 93 # # print(help(q)) 94 # q.put('123') 95 # q.put("678") 96 # print(q.qsize()) # 获取队列大小 97 # print(q.get()) # 获取队列值
课上作业:
1 #!/usr/bin/env python3.5 2 # -*-coding:utf8-*- 3 # 数据库中原有 4 old_dict = { 5 "#1":{ 'hostname': "c1", 'cpu_count': 2, 'mem_capicity': 80 }, 6 "#2":{ 'hostname': "c1", 'cpu_count': 2, 'mem_capicity': 80 }, 7 "#3":{ 'hostname': "c1", 'cpu_count': 2, 'mem_capicity': 80 }, 8 } 9 # cmdb 新汇报的数据 10 new_dict = { 11 "#1":{ 'hostname': "c1", 'cpu_count': 2, 'mem_capicity': 800 }, 12 "#3":{ 'hostname': "c1", 'cpu_count': 2, 'mem_capicity': 80 }, 13 "#4":{ 'hostname': "c2", 'cpu_count': 2, 'mem_capicity': 80 }, 14 } 15 #1、原来没有 ->〉新加的插入 16 #2、原来有 ->〉更新 17 #3、新的无,原来有 =>把原来的删除掉 18 #需求 19 #要更新的数据 20 #要删除的数据 21 #要添加的数据 22 #交集、差集 23 old = set(old_dict.keys()) # 将旧的字典创建集合 24 new = set(new_dict.keys()) # 将新的字典创建集合 25 # 交集:要更新的数据,即把原来的更新为最新的数据 26 # 差集:原来的数据删除,新的数据进行添加 27 # delete_set = old.difference(update_set) # 差集,创建新对象,获取旧的字典里存在的且不在交集里面的,这种方式是通过循环去比较 28 # add_set = new.difference(update_set) # 差集,创建新对象,获取新的字典里存在的且不在交集里面的 29 # 交集 30 update_set = old.intersection(new) # 取交集 31 delete_set = old.symmetric_difference(update_set) # 差集,创建新对象,获取旧的字典里存在的且不在交集里面的,对称差集 32 add_set = new.symmetric_difference(update_set) # 差集,创建新对象,获取新的字典里存在的且不在交集里面的,对称差集 33 # print(update_set) # 需要更新的 34 # print(delete_set) # 需要删除的 35 # print(add_set) # 需要增加的 36 # 更新 37 for i in update_set: 38 b = new_dict.get(i) 39 c = old_dict.get(i) 40 if b == c: 41 continue 42 else: 43 c.update(b) # 将对应旧字典的数据进行更新 44 # print(new_dict) 45 # print(old_dict) 46 # print(b) 47 # print(c) 48 # 删除 49 for i in delete_set: 50 old_dict.pop(i) # 删除旧的不存在的字典数据 51 # print(old_dict) 52 # 添加 53 for i in add_set: 54 old_dict.update(new_dict) # 将对应旧字典的数据进行更新 55 56 print("new_dict: %s" % new_dict) 57 print("old_dict: %s" % old_dict)
深浅拷贝:
1 #!/usr/bin/env python3.5 2 # -*-coding:utf8-*- 3 import copy 4 # copy.copy() # 浅拷贝 只拷贝一层 5 # copy.deepcopy() # 深拷贝 有多层就拷贝多少份 6 # = # 赋值 7 # a1 =12324 8 # a3 = copy.copy(a1) 9 # print(a1) 10 # print(a3) 11 # # 其它,元祖,列表,字典…… 12 # n1 = {"k1": "12", "k2": "2212", 'k3': ["112", ["adfa", "1231234"]]} 13 # n2 = n1 14 # print(id(n1)) 15 # print(id(n2)) 16 # n3 = copy.copy(n1) 17 # n3 = copy.deepcopy(n1) 18 # print(id(n1)) 19 # print(id(n3)) 20 # print(id(n1["k3"])) 21 # print(id(n3["k3"])) 22 # print(id(n1["k3"][1])) 23 # print(id(n3["k3"][1])) 24 # print(n1["k3"][1]) 25 # 监控模板 深浅拷贝 26 # 27 # dic = { 28 # "cpu": [80], 29 # "mem": [80], 30 # "disk": [80] 31 # } 32 # print("brefor:",dic) 33 # new_dic = copy.deepcopy(dic) 34 # new_dic['cpu'][0] = 50 35 # print(new_dic)