python自动化测试 第 2 章.基本数据类型(集合与字典)

一、散列类型

用来表示无序集合

1 集合

无序不重复元素的集合。
三大特性:

  • 确定性:对于任意一个元素,要么它属于某个指定集合,要么它不属于该集合,二者必居其一。
  • 互异性:同一个集合中的元素是互不相同的。
  • 无序性:任意改变集合中元素的排列次序,它们仍然表示同一个集合。

1.1 python中集合的定义

一对大括号进行定义,元素之间使用逗号隔开。集合中的元素必须是不可变类型 python中集合用set表示

a = {1,2,3,4,5,6}
b = {1,'a',1.5,(1,2)}
print('a的类型是:', type(a))
print('b的类型是:', type(b))
{[1,2,3],1}    # 会报错,因为第一个元素是列表,列表是可变数据类型,不能作为集合的元素

以下几个空数据类型(序列)都可以利用内置函数表示

empty_set = set() # 空集合
empty_tuple = tuple()
empty_list = list()
empty_str = str()
empty_dict = dict() # 空字典

1.2 集合的常用操作

1.2.1 添加元素

.add(obj),向集合中添加元素obj,不存在则添加,元素obj必须是不可变数据类型

s = {1,2}
s.add(3)
print(s)  # 输出{1, 2, 3}
s.add([1,2]) # 报错TypeError: unhashable type: 'list'
print(s)

.update(iterable),向集合添加多个元素,如果集合中不存在则添加

s = {1, 2}
s.update([3, 4, (5, 'a')]) # 输出{(5, 'a'), 1, 2, 3, 4}
print(s)
s.update([3, 4, [5, 'a']]) 

1.2.2 删除元素

.pop()随机删除并返回集合中的一个元素,如果集合为空抛出异常

s = {1,2,3,4,5,6}
s.pop() 

.remove(ele),从集合里删除元素ele,如果不存在则报错

s = {1,2,3,4,5,6}
s.remove(3) #  输出{1, 2, 4, 5, 6}

.discard(ele),从集合中删除ele元素,如果不存在不做任何操作

s = {1,2,3,4,5,6}
s.discard(3) #  输出{1, 2, 4, 5, 6}

.clear(),清空集合

s = {1,2,3,4,5,6}
s.clear() #  输出set()
print(s)

1.2.3 集合的运算(了解即可)

数学符号 python运算符 含义 定义
& 交集 一般地,由所有属于A且属于B的元素所组成的集合叫做AB的交集.
| 并集 一般地,由所有属于集合A或属于集合B的元素所组成的集合,叫做AB的并集
-或\ - 相对补集/差集 A-B,取在A集合但不在B集合的项
^ 对称差集/反交集 A^B,取只在A集合和只在B集合的项,去掉两者交集项
差集/相对补集

A-B,取在A集合但不在B集合的项


image.png
s1 = {1,2,3}
s2 = {2,3,4}
s = s1-s2
print(s) # 输出{1}
反交集/对称差集

取不在集合 AB 交集里的元素组成的集合称为对称差集,也叫反交集


image.png
s1 = {1,2,3}
s2 = {2,3,4}
s = s1^s2
print(s) # 输出{1, 4}

1.3 集合去重

ls = [1, 1, 2, 3, 2, 4, 5, 4]
res = set(ls)
print(res) # 输出{1, 2, 3, 4, 5}

2 字典

使用集合中的元素作为key,和值形成键值对,通过key找到值

键值对的集合

2.1 字典的定义

使用一对大括号进行定义,键值对之间使用逗号隔开,键和值使用冒号分割。
字典的键必须是不可变数据类型,且不重复,值可以是任意的数据类型。
实际上,字典是Hash表,所以key必须是不可变数据类型
python使用dict表示字典
zd = {'name': '张学友', 'age': '50', 'height': 170, 'hobby': ['演戏', '唱歌']}

2.2 字典的索引

通过键作为索引来获取对应的值,字典中的键是无序的

zd = {'name': '张学友',  'age': '50', 'height': 170, 'hobby': ['演戏', '唱歌']}
ne = zd['name']
hy = zd['hobby'][1]
print(ne , hy)

2.3 字典的常用操作

2.3.1 增加元素

直接通过key 赋值的方式进行添加元素,如果key存在则修改

zd = {'name': '张学友',  'age': 50, 'height': 170, 'hobby': ['演戏', '唱歌']}
zd['name'] = '刘德华'
zd['weigh'] = 60
print(zd)

.update(new_dict),将new_dict 合并到字典中,如果有重复的元素,重复的不会添加

zd = {'name': '张学友',  'age': '50', 'height': 170, 'hobby': ['演戏', '唱歌']}
dc = {'sex': '男'}
zd.update(dc)
print(zd)

2.3.2 删除元素

pop(key,[,d]),删除指定的key和对应的值,并返回key对应的值,如果key不存在,则返回d,如果没有给定d,则抛出异常

dc = {'sex': '男', 'sd': 123, 'height': 170}
res = dc.pop('sex')
print(res)
print(dc)
输出:
男
{'sd': 123, 'height': 170}  'sex': '男被删除
dc = {'sex': '男', 'sd': 123, 'height': 170}
res = dc.pop('sex1', '默认值')
print(res)
print(dc)
输出:
默认值
{'sex': '男', 'sd': 123, 'height': 170}”

.popitem() 随机删除字典中的一个键值对,并且以二元元组(key,value)的方式返回

dc = {'sex': '男', 'sd': 123, 'height': 170}
res = dc.popitem()
print(res)
print(dc)

2.3.3 查询元素

通过key查询,如果key不存在即会报错

dc = {'sex': '男', 'sd': 123, 'height': 170}
res = dc['sex']
print(dc)

.get(key,default=None),获取key对应的value,如果不存在则返回default

dc = {'sex': '男', 'sd': 123, 'height': 170}
res = dc.get('sex')
res1 = dc.get('sex1')
res2 = dc.get('sex2', '自定义默认值')
print(res, res1, res2) #输出 男 None 自定义默认值

二、其他数据类型

1. 布尔型

bool,True和False 表示 真和假
条件表达式,比较表达式的运算结果返回布尔型

1.1 比较运算符

运算符 描述 实例
== 等于-比较对象是否相等 print(a==b) # False
is 等于-比较对象的内存地址是否相同 print(a is b)
!= 不等于 print(a!=b) # True
> 大于 print(a>b) # False
< 小于 print(a<b) # True
>= 大于等于 print(a>=b) # False
<= 小于等于 print(a<=b) # True

True表示1,False表示0

3.1.1 ==与is的分别(面试常考)

== 比较的是值是否相等
is比较的是内存地址是否相等

a = 26309
b = 26309
print(a == b)  # 比较值得大小
print(a is b)   # 比较的是id

1.1.1 内存优化机制

c = 10
d = 10
print(c is d) # 输出ture

上面代码中为什么输出True,之前说过不可变数据类型赋值时,会新建一个内存空间,上面代码中的内存地址应该是不一致才对,输出应该是False,为什么会输出True呢?
因为为了优化内存,对常用的数据进行了缓存,python解释器启动的时候,会预先创建-5到256这些数字,所以将10赋值给a和b,ab都指向同一个对象,所以是ture。

但是发现赋值257时,按照上面说的原理,下面代码中c is d应该是输出False才对,为什么会输出True呢
c和d分成两行赋值

c = 257
d = 257
print(c is d) # 输出ture

c和d同一行赋值,此时

c, d = 257, 257
print(c is d)

猜测:代码是从上往下执行的,分行赋值保留了缓存,所以d还是指向了c赋值时创建的对象,所以输出了True,同行赋值c,d是同时赋值执行的,所以会创建两个对象

1.2 成员运算符

运算符 描述 实例
in 如果在指定的序列中找到值返回True,否则False L = [1, 2, 3, 4, 5] a = 3 print(a in L) # True
not in 如果在指定的序列中没有找到值返回True,否则False print(a not in L) # False
ls = [1,2,3,4]
a = 2
print(a in ls)
# 字典是看key
dt = {'name': '刘德华'}
print('name' in dt)

1.3 布尔型运算

布尔型数据可以和数值数据进行数学计算,True 其实是 整数1 False是整数0

print(True + 1)
print(False + 1)
print(True + False)
分别输出2 1 1

1.4 布尔型转换

任意的数据都可以通过bool转换成布尔型
在python中,0,0.0,0.0+0.0j,空字符串,空列表,空元组,空字典,空集合,None的布尔值是False,其他的都是True

print(bool('name'))   #输出True
print(bool(''))   #输出False

1.5 逻辑运算符

运算符 描述 实例
and 与,如果x为False,x and y返回x的值,否则返回y的值 print(a and b) # True
or 或,如果x为True,x and y返回x的值,否则返回y的值 print(a or b) # True
not 非,如果x为True,返回False,反之,返回True print(not a) # False
print(True and True)
print(False and True)
print(True and True)
print(True or True)
print(not True)
print(not False)

and,or逻辑运算表达式返回值遵循短路的原则

a = 1
b = 2
print(a and b) # a and b表达式当 a为真时,返回b的值,输出2
print(b and a) # b and a表达式当 b为真时,返回b的值,输出1
a = 0
b = 1
print(a or b)  # a or b 表达式,当 a为假的时候,返回b的值
a = 2
b = 1
print(a or b) # a or b 表达式,当 a为真的时候,返回a的值2,称之为短路
print(b or a) # b or a 表达式,当 b为真的时候,返回b的值1,称之为短路

2. None

特殊的数据类型,它的值就是它本身 None,表示空,表示不存在

ls = [1, 2]
res = ls.remove(1)
print(res) # 输出None
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容