文章目录
一、字典
1、字典介绍
- 字典的每个元素由两部分组成,键:值,键是唯一的,不能重复,键、值的类型可以是任意类型。例如:info = {‘name’: ‘张三’, ‘年纪’: ‘23’,},info就是一个字典,存储张三的信息。
- 字典和列表一样,能够存储多个数据。
- 列表中找某个元素时,是根据下标进行的,字典中是根据键来查找,也就是用冒号前面的值。
2、字典根据键查找
根据键查找时,用方括号将键括起来,如果有这个键就返回值的结果,如果没有则会报错
info = {'name':'张三','sex':'男','address':'中国'}
print(info['name'])
print(info['sex'])
print(info['age'])
结果:
张三
男
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-1-21ac5098b230> in <module>
2 print(info['name'])
3 print(info['sex'])
----> 4 print(info['age'])
KeyError: 'age'
为了防止报错,可以使用get方法,当没有找到查询的键时,可以设置一个参数,将返回该参数
info = {'name':'张三','sex':'男','address':'中国'}
print(info['name'])
print(info['sex'])
print(info.get('age','没有该键'))
结果:
张三
男
没有该键
3、字典常用方法
1)修改元素
字典的每个元素中的数据是可以修改的,只要通过key找到对应的值,即可修改。
info = {'name':'张三','sex':'男','address':'中国'}
info['address'] = '中国 上海'
print(info)
结果:
{'name': '张三', 'sex': '男', 'address': '中国 上海'}
2)添加元素
在修改字典时,如果该值不存在,则会新增键值对。
info = {'name':'张三','sex':'男','address':'中国'}
info['qq'] = '123456789'
print(info)
结果:
{'name': '张三', 'sex': '男', 'address': '中国', 'qq': '123456789'}
3)删除元素
可以利用del方法来删除指定的键,用clear方法来清空整个字典。
info = {'name':'张三','sex':'男','address':'中国'}
del info['address']
print(info)
info.clear()
print(info)
结果:
{'name': '张三', 'sex': '男'}
{}
4)len()
可以利用len来返回字典中键值对的个数
info = {'name':'张三','sex':'男','address':'中国'}
print(len(info))
结果:
3
5)keys()
返回一个包含字典所有KEY的列表
info = {'name':'张三','sex':'男','address':'中国'}
info.keys()
结果:
dict_keys(['name', 'sex', 'address'])
6)values()
返回一个包含字典所有value的列表
info = {'name':'张三','sex':'男','address':'中国'}
info.values()
结果:
dict_values(['张三', '男', '中国'])
7)items()
返回一个包含字典所有(key,value)元组的列表
info = {'name':'张三','sex':'男','address':'中国'}
info.items()
结果:
dict_items([('name', '张三'), ('sex', '男'), ('address', '中国')])
二、集合
1、集合创建
集合,是一个无序的数据集,用{}括起来,各元素用逗号分隔,集合的元素不重复,创建必须用set来进行,直接赋值{}是错误的,{}会默认为字典。也可以用set来把其他数据类型转换为集合类型,比如将字符串、列表、元组等类型转换为集合类型。
a = [1,2,3,4,'a','ddd','bbb']
b = 'adijgeidj'
c = ('er','world','hello',44)
d = set(a)
e = set(b)
f = set(c)
print(d)
print(e)
print(f)
结果:
{1, 2, 3, 4, 'bbb', 'ddd', 'a'}
{'i', 'd', 'j', 'g', 'e', 'a'}
{'world', 44, 'hello', 'er'}
可以看出,在将字符串类型转换为集合类型时,字符串的每个元素会单独转换为集合的元素,而不是把一个字符串整体变为一个集合的元素。
2、集合的方法
1)添加元素
用add将元素添加到集合中,如果元素已经存在,则不进行操作。
a = {1,2,3,4,'a','ddd','bbb'}
a.add('ccc')
print(a)
结果:
{1, 2, 3, 4, 'ccc', 'bbb', 'ddd', 'a'}
add方法只能添加一个元素,update方法可以是多个元素,中间用逗号隔开,也可以将列表、元组、字典等加入集合。
a = {1,2,3,4,'a','ddd','bbb'}
b = [1,2,3,4,'a','ddd','bbb']
c = ('er','world','hello',44)
a.update('gg','111','333')#注意不能添加int类型
print(a)
a.update(b)
print(a)
a.update(c)
print(a)
结果:
用update添加字符串时,同样是把字符串每个元素都添加进去,重复的不做修改。
{'3', 1, 2, 3, 4, 'bbb', 'g', 'ddd', '1', 'a'}
{'3', 1, 2, 3, 4, 'bbb', 'g', 'ddd', '1', 'a'}
{'3', 1, 2, 3, 4, 'hello', 'er', 'bbb', 'g', 44, 'ddd', 'world', '1', 'a'}
2)移除元素
用remove将集合中的元素移除,如果元素不存在,会报错。且每次只能移除一个元素。
a = {1,2,3,4,'a','ddd','bbb'}
a.remove('a','ccc')
print(a)
结果:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-25-c6ff95aad4bb> in <module>
1 a = {1,2,3,4,'a','ddd','bbb'}
----> 2 a.remove('a','ccc')
3 print(a)
TypeError: remove() takes exactly one argument (2 given)
a = {1,2,3,4,'a','ddd','bbb'}
a.remove('a')
print(a)
结果:
{1, 2, 3, 4, 'bbb', 'ddd'}
还可以用discard方法移除,如果元素不在集合中不会报错,也是只能操作一个元素。
a = {1,2,3,4,'a','ddd','bbb'}
a.discard(1)
print(a)
a.discard(5)
print(a)
结果:
{2, 3, 4, 'bbb', 'ddd', 'a'}
{2, 3, 4, 'bbb', 'ddd', 'a'}
也可以用pop来随机的删除一个元素,注意,在交互模式下是删除第一个元素。
a = {1,2,3,4,'a','ddd','bbb'}
b = a.pop()
print(b)
print(a)
结果:
1
{2, 3, 4, 'bbb', 'ddd', 'a'}
3)计算集合元素个数
同列表、字符串、字典一样,集合也可以用len来计算集合的长度。
a = {1,2,3,4,'a','ddd','bbb'}
b = len(a)
print(b)
结果:
7
从这个可以看出,用len时与上述几个方法的不同,原因是len是一个函数,而不是集合自带的方法,所以在调用时有区别。
4)判断元素是否在集合中
同其他数据类型一样,集合也可以用in 或者 not in来判断元素是否在集合中。
a = {1,2,3,4,'a','ddd','bbb'}
b = 3 in a
print(b)
d = 3 not in a
print(d)
结果:
True
False
5)集合中一些内置方法
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 删除集合中的元素,该元素在指定的集合中不存在 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回True,负责返回False |
issubset() | 判断指定集合是否为该方法参数集合的子集 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除集合的元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同元素插入到当前集合中 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
三、判断与循环语句
1、判断语句
- 单条件判断语句,由if-else组成,满足if语句的则执行if语句,不满足if语句则执行else。且else后不跟判断条件,相当于if条件的补集,if不满足不用再做判断,直接执行else。
- 多条件判断语句,由if-elif-else,其中可以有else,也可以没有,elif可以是多个,语句判断时,由上至下依次判断,直到满足条件时终止。
- if嵌套,顾名思义,跟列表嵌套列表一个道理,if语句里边包含另外一个if语句,则称为if嵌套,在语句执行时依然是从上至下,只是在遇到嵌套的if时,就去执行嵌套的if,嵌套的if执行完成后,返回上层if继续执行(注意是继续执行下边的语句,而不是从头执行外层的if)。
- if不止能跟if嵌套,还可以结合循环来嵌套,可以跟while循环、for循环等来搭配使用,同时while、for循环中也可再继续嵌套if判断。执行时的思路一样,由上至下,碰到嵌套语句时则执行嵌套语句,一层一层往里执行,最深层的执行完后返回上一层往下依次执行。
示例:
单条件判断
a = [1,2,3]
if type(a) is set:
print(a)
else:
print(set(a))
结果:
{1, 2, 3}
多条件判断
a = [1,2,3]
if len(a)>5:
print(a)
elif len(a)>4:
print(a)
else:
print(set(a))
结果:
{1, 2, 3}
a = [1,2,3,4,5,6]
if len(a)>5:
print(a)
elif len(a)>4:
print(a)
else:
print(set(a))
结果:
[1, 2, 3, 4, 5, 6]
if嵌套
che_piao = 1 #1代表有,0代表没有
dao_len = 5 #刀子长度,单位厘米
if che_piao == 1:
print('可以进站了')
if dao_len < 10:
print('可以过安检')
else:
print('没有通过安检')
print('不能乘车')
else:
print('没有票不能进站')
结果:
可以进站了
可以过安检
2、循环语句
- for循环语句,也称为遍历,比如可以将一个列表、字典、集合中的元素挨个打印,直到遍历完完成循环。遍历列表以及跟range()函数搭配是经常使用的。
- while循环,while后跟判别语句,在满足条件后一直执行循环内的语句,可以搭配continue与break来跳出循环。
- while嵌套,在一个while语句中嵌套一个循环语句,可以说while,也可以是for,还可以嵌套if语句,语句执行同if嵌套一样,从上至下依次执行,碰到嵌套语句则执行嵌套语句的内容。
- for嵌套,同while嵌套一样。
- break,在循环时,碰到break语句,则跳出整个循环。且只对最近的一层循环起作用。break只能用在循环中,除此之外不能单独使用。
- continue,同break的不同之处是,break结束整个循环,而continue结束该次循环,紧接着执行下次循环。其他性能跟break一样。
示例:
while循环:
i = 0
while i<5:
print('当前是第%d次循环'%(i+1))
print('i=%d'%i)
i+=1
结果:
当前是第1次循环
i=0
当前是第2次循环
i=1
当前是第3次循环
i=2
当前是第4次循环
i=3
当前是第5次循环
i=4
for循环:
a = {1,2,3,4,'a','ddd','bbb'}
for i in a:
print(i)
结果:
1
2
3
4
bbb
ddd
a
循环嵌套:
i = 1
while i<=5:
j = 1
while j<=i:
print('*',end='')
j+=1
print("\n")
i+=1
结果:
*
**
***
****
*****
四、三目表达式
三目表达式就是利用推导式的特性,结合if-else语句来简化的。
简单示例:
a = 10
b = 13
h = ''
h = a -b if a>b else a+b
print(h)
结果:
23