一、昨天的补充内容
(一)逻辑运算符
and or not
stu=True
if not stu:
print('你不是学生')
else:
print('是学生,可以进学校')
结果:
是学生,可以进学校
这里需要特别注意的是and 和 or都有短路效应
a=5
b=a>7 or 4
print(b) # 4
a=5
b=a>3 or 7
print(b) # True
根据上述代码的结果可总结出’or’的短路效应:
x or y
如果x不成立,返回y的值
如果x成立,返回x的值
a=6
b=a>7 and 5
print(b) # False
根据上述代码的结果可总结出’and’的短路效应:
x and y
如果x不成立,返回x的值
如果x成立,返回y的值
(二)三元表达式
形如a=…if…else…
满足if条件,值为前面的值
不满足则为后面的值
b=11
a=7 if b>10 else 8
print(a) #7
b=11
a=7 if b>10 else 8
print(a) #8
(三)嵌套循环
1.输出一个’5*5’的由’*'组成的矩阵
j=1
while j<=5:
i=1
while i<=5:
print('*',end='')
i+=1
print()
j+=1
2.输出一个由’*'组成的正三角
for i in range(1,6):
for j in range(1,i+1):
print('*',end='')
print()
3.输出一个由’*'组成的倒三角
for i in range(1,6):
for j in range(i):
print('',end=' ')
for j in range(1,6-i+1):
print('*',end='')
print()
4. '9*9’乘法表
for j in range(1,10):
for i in range(1,j+1):
print(i,'*',j,'=',i*j,end='\t')
print()
5. 输出一个由’*'组成的5*5的边框
for i in range(1,6):
for j in range(1,6):
if i==1 or i==5 or j==1 or j==5:
print('*',end='')
else:
print(' ',end='')
print()
二、字典
字典是以键值对形式存在的,无序,可修改
(一)添加操作
1.以a[‘score’]=99的形式添加,会根据key判断。若不存在,添加;若存在,覆盖。
a={'name':'张三','age':19,'sex':'男'}
a['score']=99
print(a) # {'name': '张三', 'age': 19, 'sex': '男', 'score': 99}
a['age']=18
print(a) # {'name': '张三', 'age': 18, 'sex': '男', 'score': 99}
2.setdefault()方法–添加。若存在,将不进行任何操作;若不存在,添加。
a={'name':'张三','age':19,'sex':'男'}
a.setdefault('age',20)
print(a) # {'name': '张三', 'age': 19, 'sex': '男'}
a.setdefault('score',90)
print(a) # {'name': '张三', 'age': 19, 'sex': '男', 'score': 90}
(二)删除操作
1.pop()方法–弹出指定键对应的值
注意:这里的pop()方法不同于前面介绍的,它在字典中使用时,要求必须有参数。它的返回值为字典中的value
a={'name':'张三','age':19,'sex':'男'}
b=a.pop('name')
print(b) # 张三
print(a) # {'age': 19, 'sex': '男'}
2.popitem()方法–随机弹出一个键值元组,随机是因为字典是无序的
注意:随机!!键值!!元组!!
a={'name':'张三','age':19,'sex':'男'}
b=a.popitem()
print(b) # ('sex', '男')
print(a) # {'name': '张三', 'age': 19}
3.clear()–清空
a={'name':'张三','age':19,'sex':'男'}
a.clear()
print(a) # {}
4.del–可删除字典中一个键值对,也可删除整个字典
a={'name':'张三','age':19,'sex':'男'}
del a['name']
print(a) # {'age': 19, 'sex': '男'}
del a
print(a) # 报错 字典a不存在
(三)查找操作
1.keys()–返回所有key,列表类型
a={'name':'张三','age':19,'sex':'男'}
print(a.keys()) # dict_keys(['name', 'age', 'sex'])
for i in a.keys():
print(i)
2.values()–返回所有value,列表类型
a={'name':'张三','age':19,'sex':'男'}
print(a.values()) # dict_values(['张三', 19, '男'])
for v in a.values():
print(v)
3.items()–返回所有键值对,元组类型
a={'name':'张三','age':19,'sex':'男'}
print(a.items()) # dict_items([('name', '张三'), ('age', 19), ('sex', '男')])
for kv in a.items():
print(kv)
“““
('name', '张三')
('age', 19)
('sex', '男')
”””
for k,v in a.items():
print(k,v)
“““
name 张三
age 19
sex 男
”””
4.len()–返回键值对个数
a={'name':'张三','age':19,'sex':'男'}
print(len(a)) # 3
5.get()–以键取值。若指定键不存在,默认返回None,可指定返回值。
info={'name':'张三','age':19,'sex':'男'}
name=info.get('name')
print(name) # 张三
a=info.get('a')
print(a) # None
a=info.get('a','不存在')
print(a) # 不存在
(四)修改操作
update()–以字典形式更新指定字典的内容
如果键不存在,创建;如果不存在,覆盖。
a={'name':'张三','age':19,'sex':'男'}
b={'name':'李四','score':89}
a.update(b)
print(a) # {'name': '李四', 'age': 19, 'sex': '男', 'score': 89}
(五)其他常见操作
a={‘name’:‘张三’,‘age’:19,‘sex’:‘男’}
in a/not in a–判断指定的键是否存在字典当中,与值无关。
要判断值是否存在可用in a.values()
in a功能与in a.keys()相同,但不可完全划等号
a={'name':'张三','age':19,'sex':'男'}
if 'name' in a:
print('有姓名')
if 'score' not in a:
print('没有成绩')
if '张三' in a: # 不成立
print('张三在里面')
键重复时,后面的会覆盖前面的
a={'name':'张三','age':19,'sex':'男','age':99}
print(a) # {'name': '张三', 'age': 99, 'sex': '男'}
扩展
1.类型转换
字典–>内含元组的列表
内含元组的列表–>字典
a={'name':'张三','age':19,'sex':'男'}
b=[]
c={}
for k,v in a.items():
b.append((k,v))
print(b) # [('name', '张三'), ('age', 19), ('sex', '男')]
for x in b:
y,z=x
c[y]=z
print(c) # {'name': '张三', 'age': 19, 'sex': '男'}
2.以’num:001,name=张三,age:18,sex:男’的格式打印
a={
'001':{'name':'张三','age':18,'sex':'男'},
'002':{'name':'李四','age':28,'sex':'男'},
'003':{'name':'王五','age':38,'sex':'女'},
'004':{'name':'赵四','age':48,'sex':'男'},
}
# 1
for x,y in a.items():
print('num:%s'%x,end=' ')
for k,v in y.items():
print('%s:%s'%(k,v),end=' ')
print()
# 2
for k1 in a.keys():
print('num:%s'%k1,end=' ')
for k2 in a[k1].keys():
print('%s:%s' % (k2, a[k1][k2]), end=' ')
print()
结果:
num:001 name:张三 age:18 sex:男
num:002 name:李四 age:28 sex:男
num:003 name:王五 age:38 sex:女
num:004 name:赵四 age:48 sex:男
3.给所有性别为男的添加1000元工资
for k,v in a.items():
if v['sex']=='男':
v['salary']=1000
print(k,':',v)
结果:
001 : {'name': '张三', 'age': 18, 'sex': '男', 'salary': 1000}
002 : {'name': '李四', 'age': 28, 'sex': '男', 'salary': 1000}
003 : {'name': '王五', 'age': 38, 'sex': '女'}
004 : {'name': '赵四', 'age': 48, 'sex': '男', 'salary': 1000}
三、集合
特点:唯一,无序,可修改
值唯一:
a={1,2,3,3,3,3,3}
print(a) # 自动去重,{1, 2, 3
无序:
a={1,2,3,3,3,3,3}
print(a[1]) # 报错,不支持索引,无序
(一)定义空集合只能用set()
b={} # 空字典
print(type(b)) # <class 'dict'>
b=set()
print(type(b)) # <class 'set'>
(二)添加操作
1.add()–添加
注:重复时不进行任何操作
a={1,2,3,3,3,3,3}
print(a) # {1, 2, 3}
a.add(9)
print(a) # {1, 2, 3, 9}
a.add(9)
print(a) # {1, 2, 3, 9}
2.set()
a=[1,2,3]
b=set(a)
print(b) # 转换为集合 {1, 2, 3}
a='1234'
b=set(a)
print(b) # {'2', '1', '4', '3'},顺序不定,同样是因为集合无序
b={'name':'张三','age':19}
a=set(b)
print(a) # {'age', 'name'},只有键没有值
3.update()–添加,不重复
a={1,2,3,4}
a.update([1,2,5,6])
print(a) # {1, 2, 3, 4, 5, 6}
4.顺序遍历
a={1,2,3,4}
for x in a:
print(x)
结果:
1
2
3
4
(三)删除操作
1.pop()–随机弹出一个
a={1,2,3,4}
b=a.pop()
print(b)
print(a)
2.remove()–移除指定值
a={10,20,30,40}
a.remove(20)
print(a) # {40, 10, 30}
3.clear()–清空
a={10,20,30,40}
a.clear()
print(a) # set(),空集合
4.del–删除整个集合
a={1,2,3,4}
del a
print(a) # 报错,a不存在
(四)集合数学运算
1.交集–’&'或intersection(),取公共部分
a={1,2,3,4}
b={3,4,5,6}
c=a.intersection(b)
print(c) # {3, 4}
d=a&b
print(d) # {3, 4}
2.差集–’-'或different
a={1,2,3,4}
b={3,4,5,6}
c=a-b
print(c) # {1, 2}
c=b-a
print(c) # {5, 6}
3.反交集–’^'或symmetric_difference()
a={1,2,3,4}
b={3,4,5,6}
c=a^b
print(c) # {1, 2, 5, 6}
c=a.symmetric_difference(b)
print(c) # {1, 2, 5, 6}
扩展
求出a中每个元素的个数:
a=[1,2,3,1,2,3,1,1,3,3,3,3]
b=set()
for i in set(a):
b.add(i)
for n in b:
print(n,'出现的次数为:',a.count(n))
结果:
1 出现的次数为: 4
2 出现的次数为: 2
3 出现的次数为: 6