3 字典
一个典型的字典的定义方式:
a = {'name':'gaoqi','age':18,'job':'programmer'}
3.1 字典的创建
#通过{}、dict()来创建字典对象a = {'name':'gaoqi','age':18,'job':'programmer'}b = dict(name='gaoqi',age=18,job='programmer')#通过 zip()创建字典对象>>> d = dict(zip(k,v))#通过 fromkeys 创建值为空的字典>>> a = dict.fromkeys(['name','age','job']) # 值都是None
3.2 字典元素的访问
#通过 [键] 获得“值”>>> a['name']#通过 get()方法获得“值”>>> a.get('name')>>> a.get('sex','NO') #指定键不存在,也可以设定指定键不存在时默认返回的对象#列出所有的键值对>>> a.items()#列出所有的键,列出所有的值>>> a.keys()>>> a.values()#len() 键值对的个数#检测一个“键”是否在字典中>>> "name" in a
3.2 字典元素添加、修改、删除
#给字典新增“键值对”
>>>a = {'name':'gaoqi','age':18,'job':'programmer'}
>>>a['address']='西三旗 1 号院'
>>>a
>>>{'name': 'gaoqi', 'age': 18, 'job': 'programmer', 'address': '西三旗 1 号院'}
>>>a['address']='普陀区'
>>>a
>>>{'name': 'gaoqi', 'age': 18, 'job': 'programmer', 'address': '普陀区'}#使用 update()将新字典中所有键值对全部添加到旧字典对象上。如果 key 有重复,则直接覆盖>>> a.update(b)#字典中元素的删除,可以使用 del()方法;或者 clear()删除所有键值对;pop()删除指定键值对,并返回对应的“值对象”>>> del(a['name'])>>> b = a.pop('age')#popitem() :随机删除和返回该键值对>>> a.popitem()
3.3 字典解包
>>> name,age,job=s#默认对键进行操作>>> name,age,job=s.items()#对键值对进行操作>>> name,age,job=s.values()#对值进行操作
s = {'name':'gaoqi','age':18,'job':'teacher'}
name,age,job=s
name
'name'
name,age,job=s.items()
name
('name', 'gaoqi')
name,age,job=s.values()
name
'gaoqi'
小练习:表格数据使用字典和列表存储,并实现访问
r1 = {"name":"高小一","age":"18","salary":"30000","city":"北京"}
r2 = {"name":"高小二","age":"19","salary":"20000","city":"上海"}
r3 = {"name":"高小五","age":"20","salary":"10000","city":"深圳"}
tb = [r1,r2,r3]
# 获得第二行的人的薪资
print(tb[1].get("salary"))
# 打印表中所有的薪资
for i in range(len(tb)):
print(tb[i].get("salary"))
# 打印表中所有的数据
for i in range(len(tb)):
print(tb[i].get("name"),tb[i].get("age"),tb[i].get("salary"),tb[i].get("city"))
3.4 字典核心底层原理(重要)
1. 键必须可散列
(1) 数字、字符串、元组,都是可散列的。
(2) 自定义对象需要支持下面三点:
1 支持 hash()函数
2 支持通过__eq__()方法检测相等性。
3 若 a==b 为真,则 hash(a)==hash(b)也为真。
2. 字典在内存中开销巨大,典型的空间换时间。
3. 键查询速度很快
4. 往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字
典的同时进行字典的修改
4 集合
集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典
中的“键对象”,因此是不能重复的且唯一的。
4.1 集合创建和删除
#使用{}创建集合对象,并使用 add()方法添加元素
>>> a = {3,5,7}
>>> a.add(9)>>> a{9, 3, 5, 7}#使用 set(),将列表、元组等可迭代对象转成集合。如果原来数据存在重复数据,则只保
留一个。a = ['a','b','c','b']
b = set(a)
b
{'c', 'b', 'a'}#remove()删除指定元素;clear()清空整个集合a = {10,20,30,40,50}
a.remove(20)
a
{50, 40, 10, 30}
a.clear()
a
set()
4.2 集合相关操作
>>> a = {1,3,'sxt'}>>> b = {'he','it','sxt'}>>> a|b #并集{1, 3, 'sxt', 'he', 'it'}>>> a&b #交集{'sxt'}>>> a-b #差集{1, 3}>>> a.union(b) #并集{1, 3, 'sxt', 'he', 'it'}>>> a.intersection(b) #交集{'sxt'}>>> a.difference(b) #差集{1, 3}
第三章作业
第四章 控制语句
1.1 单分支选择结构
if 语句单分支结构的语法形式如下:
if 条件表达式:
语句/语句块
其中:
1
.条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等。
2
.语句/语句块:可以是一条语句,也可以是多条语句。多条语句,缩进必须对齐一致。
num = input("输入一个数字:")
if int(num)<10:
print(num)
·条件表达式中,不能有赋值操作符“=”
1.2 双分支选择结构
双分支结构的语法格式如下:
if 条件表达式 :
语句 1/语句块 1
else:
语句 2/语句块 2
a = input("请输入一个数字:")
if int(a)<10:
print("a是小于10的数字")
else:
print("a是大于等于10的数字")
1.3 三元条件运算符
Python 提供了三元运算符,用来在某些简单双分支赋值情况。三元条件运算符语法格式如
下:
条件为真时的值 if (条件表达式) else 条件为假时的值
a = input("请输入一个数字:")
print("a是小于10的数字") if int(a)<10 else print("a是大于等于10的数字")
1.4 多分支选择结构
score = int(input("请输入分数"))
grade = ""
if score<60:
grade = "不及格"
elif score<80:
grade = "及格"
elif score<90:
grade = "良好"
else:
grade = "优秀"
print("分数是{0},等级是{1}".format(score,grade))
请输入分数70
分数是70,等级是及格
1.5 选择结构嵌套
选择结构可以嵌套,使用时一定要注意控制好不同级别代码块的缩进量,因为缩进量决定了
代码的从属关系。
语法格式如下:
if 表达式 1:
语句块 1
if 表达式 2:
语句块 2
else:
语句块 3
else:
if 表达式 4:
语句块 4
2 循环结构
循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反
复执行循环体里的语句。在每次执行完后都会判断一次条件是否为 True,如果
为 True 则重复执行循环体里的语句。图示如下:
2.1 while 循环
while 循环的语法格式如下:
while 条件表达式:
循环体语句
num = 0
sum_0 =0
sum_1 = 0 #计算奇数和
sum_2 = 0 #计算偶数和
while (num<=100):
sum_0 += num
if (num%2==0):
sum_2 += num
else:
sum_1 += num
num += 1
print(sum_0,sum_1,sum_2)
5050 2500 2550