python3自动化学习02

概要:set集合、 collections系列 (计数器、有序字典、默认字典、可命名元组、队列)

一 set集合

set集合:无序且不重复的元素集合

优势:1.访问速度快

      2.天生解决了重复问题

set功能演示

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 s1 = set([11,22,33,])
 4 s2 = set([33,44])
 5 ‘‘‘
 6 #add --增加一个元素到集合
 7 s1.add(55)
 8 print(s1)
 9
10 #clear --清除集合中所有的元素
11 s1.clear()
12 print(s1)
13
14 #copy --拷贝,会在内存中创建新的集合?
15 s3 = s1.copy()
16 print("s3:%s" %s3)
17 s3.pop()
18 print("s1:%s" %s1)
19 print("s3:%s" %s3)
20
21 #difference  --取差集,并且新建一个集合
22 s3 = s1.difference(s2) #取 s1 与 (s1 与 s2 交集) 的差集
23 s4 = s2.difference(s1) #取 s2 与 (s1 与 s2 交集) 的差集
24 print("s3:",s3)
25 print("s4:",s4)
26
27 #difference_update  --取差集,并且修改原来的集合
28 #s1.difference_update(s2)  #取 s1 与 (s1 与 s2 交集) 的差集
29 #s3 = s1
30 #print(s3)
31 s2.difference_update(s1)   #取 s2 与 (s1 与 s2 交集) 的差集
32 print(s2)
33
34 #discard --删除元素
35 s1.discard(11)
36 print(s1)
37
38 #intersection --取交集,并且新建一个集合
39 s3 = s1.intersection(s2)
40 print(s3)
41
42 #intersection_update  --取交集,并且修改原来的集合
43 s1.intersection_update(s2)
44 s3 = s1
45 print(s3,s1)
46
47 #isdisjoint --如果没有交集返回True
48 t = s1.isdisjoint(s2)
49 print(t)
50
51 #issubeset --是否是子集
52 print(s2.issubset(s1)) #s2 是否是 s1 的子集
53
54 #issuperset --是否是父集
55 print(s1.issuperset(s2)) #s1 是否是 s2 的父集
56
57 #pop --随机弹出一个元素
58 s3 = s1.pop()
59 print(s1)
60 print(s3)
61
62 #remove --指定删除元素
63 s1.remove(11)
64 print(s1)
65
66 #symmetric_difference  --并集减去交集,并且创建一个新对象
67 s3 = s2.symmetric_difference(s1) #(s2与s1的并集) 减去 (s2 与 s1 的交集)
68 print(s3)
69 #union --并集,创建一个新的集合
70 s3 = s1.union(s2)
71 print(s3)
72 #intersection --交集,创建一个新的集合
73 s4 = s1.intersection(s2)
74 print(s4)
75 #difference --差集,创建一个新的集合
76 s5 = s3.difference(s4)
77 print(s5)
78
79 #symmetric_difference_update --并集减去交集,并且修改原来的集合
80 s1.symmetric_difference_update(s2) #(s2与s1的并集) 减去 (s2 与 s1 的交集)
81 print(s1)
82
83 #update --更新,相当于并集,修改原来的集合
84 s1.update(s2) #取s1和s2并集,并修改s1
85 print(s1)
86 print(s2)
87 ‘‘‘

set练习

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 """
 4 练习:寻找差异
 5 # 数据库中原有
 6 old_dict = {
 7     "#1":{ ‘hostname‘:c1, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 },
 8     "#2":{ ‘hostname‘:c1, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 },
 9     "#3":{ ‘hostname‘:c1, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 }
10 }
11
12 # cmdb 新汇报的数据
13 new_dict = {
14     "#1":{ ‘hostname‘:c1, ‘cpu_count‘: 2, ‘mem_capicity‘: 800 },
15     "#3":{ ‘hostname‘:c1, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 },
16     "#4":{ ‘hostname‘:c2, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 }
17 }
18 需要删除:?
19 需要新建:?
20 需要更新:? 注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新
21 """
22 old_dict = {
23     "#1":{ ‘hostname‘:‘c1‘, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 },
24     "#2":{ ‘hostname‘:‘c1‘, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 },
25     "#3":{ ‘hostname‘:‘c1‘, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 }
26 }
27
28 new_dict = {
29     "#1":{ ‘hostname‘:‘c1‘, ‘cpu_count‘: 2, ‘mem_capicity‘: 800 },
30     "#3":{ ‘hostname‘:‘c1‘, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 },
31     "#4":{ ‘hostname‘:‘c2‘, ‘cpu_count‘: 2, ‘mem_capicity‘: 80 }
32 }
33
34 #获取两个字典的key值,并且创建成set集合
35 old = set(old_dict.keys())
36 print(old)
37 new = set(new_dict.keys())
38 print(new)
39
40 #需要更新的数据
41 update_set = old.intersection(new)
42 print(update_set)
43
44 #需要增加的数据
45 add_set = new.difference(old)
46 print(add_set)
47
48 #需要删除的数据
49 del_set = old.difference(new)
50 print(del_set)

 二 collections系列

1.计数器(counter)

counter:是对字典类型的补充,用于追踪值出现的次数(序列里面元素出现的次数)

counter继承了dict类,所有它能够使用dict类的方法

counter功能演示

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 import collections
 4
 5 c = collections.Counter(‘abcdeabcdabcaba‘)
 6 #c = collections.Counter([‘11‘,‘22‘,‘33‘,‘22‘])
 7 print(c)
 8 ‘‘‘
 9 #注意是类似字典而并不是真正的字典
10 print(type(c))
11 #elements 与 items 差别
12 #elements --循环所有值与 dict 一样,拿到所有原生的值,没有经过处理。
13 for i in c.elements():
14     print(i)
15 #items --处理完以后的数据,循环键值对。
16 for k,v in c.items():
17     print(k,v)
18 #循环键
19 for k in c.keys():
20     print(k)
21
22 #update --更新计数器,其实就是增加;如果原来没有,则新建,如果有则加一
23 obj = collections.Counter([‘11‘,‘22‘,‘22‘,‘33‘])
24 print(obj)
25 obj.update([‘Alnk‘,‘11‘,‘11‘])
26 print(obj)
27
28 #subtract --相减,原来的计数器中的每一个元素的数量减去后添加的元素的数量,可以产生负数
29 obj = collections.Counter([‘11‘,‘22‘,‘22‘,‘33‘])
30 obj.subtract([‘11‘,‘Alnk‘,‘11‘])
31 print(obj)
32 ‘‘‘

2.有序字典(OrderDict)

OrderDict原理:

L1 = [k1,k2,k3, ...]

D1 = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,...}

通过迭代L1中有序的元素(key),去排序D1中无序的字典。

OrderDict继承了dict类,所有它能够使用dict类的方法

OrderDict部分功能演示

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 import collections
 4
 5 dic = collections.OrderedDict()
 6 #dic = {}
 7 dic[‘k1‘] = ‘v1‘
 8 dic[‘k2‘] = ‘v2‘
 9 dic[‘k3‘] = ‘v3‘
10 dic[‘k4‘] = ‘v4‘
11 print(dic)
12 ‘‘‘‘
13 #move_to_end --把指定的键值对拿到最后
14 dic.move_to_end(‘k1‘)
15 print(dic)
16
17 #popitem() --后进先出,与弹夹类似
18 dic.popitem()
19 print(dic)
20
21 #pop() --指定拿出的键值对。还可以有返回值
22 #dic.pop(‘k2‘)
23 #print(dic)
24 ret = dic.pop(‘k2‘)
25 print(ret)
26
27 #update() --加数据,需要传字典
28 dic.update({‘k1‘:‘v11111‘,‘k10‘:‘v10‘})
29 print(dic)
30 ‘‘‘

3.默认字典(defaultdict)

可以设定字典的值是默认的某个数据类型

defaultdict继承了dict类,所有它能够使用dict类的方法

defaultdict练习

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 import collections
 4 ‘‘‘
 5 #示例1
 6 all_list = [11,22,33,44,55,66,77,88,99,90]
 7 dic = {}
 8 for i in all_list:
 9     if i > 66:
10         if ‘k1‘ in dic.keys():
11             dic[‘k1‘].append(i)
12         else:
13             dic[‘k1‘] = [i,]
14     else:
15         if ‘k2‘ in dic.keys():
16             dic[‘k2‘].append(i)
17         else:
18             dic[‘k2‘] = [i,]
19 print(dic)
20 #上面列子解解释
21 dic = {‘k1‘:[1,]}
22 print(type(dic[‘k1‘]))  #dic[‘k1‘]相当于一个列表,当然可以append啦
23 dic[‘k1‘].append(2)
24 print(dic)
25
26 #默认字典:可以定义一个值,让字典的默认值是一个列表
27 dic = collections.defaultdict(list)
28 dic[‘k1‘].append(‘Alnk‘)
29 print(dic)
30 ‘‘‘
31 #上面的示例1可以按照如下方法实现
32 all_list = [11,22,33,44,55,66,77,88,99,90]
33 dic = collections.defaultdict(list)
34 for value in all_list:
35     if value > 66:
36         dic[‘k1‘].append(value)
37     else:
38         dic[‘k2‘].append(value)
39 print(dic)

4.可命名元组(namedtuple)

可命名元组没有继承python的类,所以需要自定义一个类。

t = (11,    22,    33)

  name  addr    ip

可以通过给元素重命名,以后通过命名访问,而不用索引,如:

t.name

t.addr

t.ip

可命名元组可以应用于坐标,示例

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 import  collections
 4
 5 #创建类,和defaultdict有点类似
 6 #坐标会使用到这个
 7 mytuple_class = collections.namedtuple(‘mytuple_class‘,[‘x‘,‘y‘,‘z‘])
 8 #print(help(mytuple_class))
 9 obj = mytuple_class(11,22,33)
10 print(obj.x,obj.y,obj.z)

5.双向队列、单向队列

双向队列(deque)

双向队列可以两端都插入和取出,也可以随意插入和取出,很灵活。

功能演示

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 import collections
 4
 5 d = collections.deque()
 6 d.append(‘1‘)
 7 d.appendleft(‘10‘)
 8 d.appendleft(‘1‘)
 9 d.extend([‘yy‘,‘zz‘])
10 d.extendleft([‘aa‘,‘bb‘])
11 print(d)
12 ‘‘‘
13 #count --计数
14 r = d.count(‘1‘)
15 print(r)
16
17 #extend --多个元素添加,扩展
18 d.extend([‘yy‘,‘zz‘])
19 d.extendleft([‘aa‘,‘bb‘])
20 print(d)
21
22 #index --取这个值在队列里面的索引,默认从左往右,取第一个找到的值的索引
23 s = d.index(‘1‘)
24 print(s)
25
26 #insert  --插入,随便插入
27 #pop --默认从右边取数据
28 #popleft --从左边取数据
29 #remove --删除
30 #reverse --反转
31 #rotate --队列可以理解为首尾是相连的,这个就相当于转动这个圆盘一样。从右边拿数据插到左边,执行1次操作
32 d.rotate(1)
33 print(d)
34 ‘‘‘

单向队列(queue),单向队列的位于queue模块里面,和上面其他介绍的位于collections系列不一样

先进先出,后进后出

部分功能演示

 1 #!/usr/bin/env python3
 2 #author:Alnk
 3 import queue
 4
 5 #队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度
 6 d = queue.Queue(maxsize=10)
 7
 8 #put --将一个值放入到队列当中
 9 d.put("aa")
10 d.put("bb")
11
12 #qsize   --统计队列中的元素
13 print(d.qsize())
14
15 #empty --如果队列为空,返回True,否则False
16 print(d.empty())
17
18 #full --如果队列已满返回Ture,否则False
19 print(d.full())
20
21 #get --取出队列中的一个元素
22 print(d.get())

原文地址:https://www.cnblogs.com/lichengguo/p/9174469.html

时间: 2024-10-22 22:11:21

python3自动化学习02的相关文章

python3自动化学习03

概要:深浅拷贝.函数.lambda.内置函数.文件操作 一.深浅拷贝 1.对于字符串.数字来说,赋值.深拷贝.浅拷贝的结果是一样的,都是用的内存中的同一个地址. 如下图所示: 1 import copy 2 ''' 3 4 a1 = 123 5 a2 = 123 6 #a2 = a1 7 print(id(a1)) 8 print(id(a2)) 9 #浅拷贝,内存中的地址一样 10 a3 = copy.copy(a1) 11 print(id(a1)) 12 print(id(a3)) 13

python3自动化学习04

概要:迭代器.yield生成器.装饰器.递归函数.简单的算法(二分查找,二维数组).正则表达式基础 一.迭代器 迭代器是访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束. 迭代器只能往前不能后退.迭代器的一大优点就是不要求事先准备好整个迭代的过程中所有的元素,迭代器仅仅是在迭代到某个元素才计算该元素,而在这之前或之后,元素可以不存在或者销毁,这个特点使它特别适用于遍历一些巨大或无限的集合. 特点: 1.访问者不需要关心迭代器内部的结构,仅仅需要通过 __n

python3自动化学习06

本节主要内容:面向对象介绍.特性.语法 一.面向对象介绍 1 #!/usr/bin/env python3 2 #author:Alnk(李成果) 3 """ 4 编程范式: 5 编程是 程序员 用特定的语法+数据结构+算法 组成的代码来告诉计算机如何执行任务的过程 , 6 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马, 7 实现一个任务的方式有很多种不同的方式,对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式. 8

《python3自动化接口+selenium》10月13号开学!(2个月2000,包教会)

<python3自动化接口+selenium>10月13号开学!(2个月2000,包教会) 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 报名费2000一人(周期2个月) 联系QQ:283340479 个人成就: 1.个人博客,百度直接搜索:上海-悠悠博客 2.个人原创微信公众号:yoyoketang 3.已经在百度阅读上线的书,百度搜索:百度阅读,再搜索书名: <selenium webdriver基于源码案例>-作者:七月份的尾巴_葵花&上海-悠悠 <pyt

ThinkPhp学习02

原文:ThinkPhp学习02 一.什么是MVC                M -Model 编写model类 对数据进行操作 V -View  编写html文件,页面呈现 C -Controller 编写类文件(UserAction.class.php)二.ThinkPHP的MVC特点        三.ThinkPHP的MVC对应的目录    M 项目目录/应用目录/Lib/Model V 项目目录/应用目录/Tpl C 项目目录/应用目录/Lib/Action四.url访问C     

【金阳光测试】Android自动化 -- 学习历程:MonkeyRunner原理初步

章节:自动化基础篇——MonkeyRunner原理初步 网易云课堂: http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=877115&courseId=712011 主要讲解内容及笔记: 一.理论知识和脚本演示 最佳方式是上官网文档去查看monkeyrunner的介绍,官网上不去,就找了一个本地的android 4.2 的查看,基本内容没啥变化 First,什么是MonkeyRunn

设计模式学习02—工厂模式

1.动机与定义 我们在程序中使用一个对象时,需要new一下,如果需要设置其他值就再初始化一下.比如我要使用一个按钮,手动new一个矩形按钮,然后初始化一些值,如显示文字,背景色等. // 矩形按钮 IButton btn = new RecButton(); // 初始化其他值 btn.setText("提交"); btn.setBackgroundColor("#00aaff"); // 其他初始化省略 // 圆形按钮 IButton btn2 = new Rou

接口自动化学习笔记

虫师的接口自动化学习笔记(虫师原创----http://fnng.cnblogs.com) web应用接口测试分为: 1.模块接口测试:主要测试模块之间的调用与返回 2.web接口: a.服务器接口:测试浏览器与服务器的接口 b.外部接口:指调用的接口由第三方系统提供 接口测试的意义: 1.保证系统的稳定性 2.将bug控制在项目前期 3.检查服务器的异常处理能力 我们通常把前端的验证称为弱验证,因为它很容易被绕过,这个时间如果只站在功能的层面时行测试,就很难发现一些安全的问题.不以前功能为入口

RabbitMQ (消息队列)专题学习02 Hello World

一.概述 RabbitMQ可以当做一个消息代理,它的核心原理非常简单:即接收和发送消息,可以把它想象成一个邮局:我们把信件放入邮箱,邮递员就会把信件投递到你的收件人处,RabbitMQ就是一个邮箱.邮局.投递员功能综合体,整个过程就是:邮箱接收信件,邮局转发信件,投递员投递信件到达收件人处. RabbitMQ和邮局的主要区别就是RabbitMQ接收.存储和发送的是二进制数据----消息. 在专题学习一中我们已经简单提到了一些概念,在此我们更为深入的学习下RabbitMQ相关的专有名词. 1.生产