Task 05
——字典、集合和序列
练习题(字典):
- 字典的基本操作:
dic = {
'python':95,
'java':99,
'c':100
}
• 字典的长度是多少:
print(len(dic))
• 请修改‘java’这个key对应的value值为98
dic['java']=98
• 请删除c这个key
del dic['c']
• 增加一个key-value对,key的值为php,value的值是90
dic['php']=90
• 获取所有的key值,存储在列表里
lst = list(dic.keys())
• 获取所有的value值,存储在列表里
lst = list(dic.values())
• 判断 javascript 是否在字典中
print('javascript' in dic)
#在是True不在Faluse
• 获得字典里所有value 的和
lst = list(dic.values())
i = 0
sum = 0
while i<len(lst):
sum=sum+lst[i]
i += 1
• 获取字典里最大的value
lst = list(dic.values())
Max = max(lst)
• 获取字典里最小的value
lst = list(dic.values())
Max = min(lst)
• 字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中
dic1 = {'php':97}
dic.update(dic1)
- 有一个字典,保存的是学生各个编程语言的成绩,内容如下。各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数
transfer_score(score_dict)
,将分数修改成int型。
data = {
'python':{'上学期':'90','下学期':'95'}
'c++':['95','96','97']
'java':[{'月考':'90','期中考试':'94','期末考试':'98'}]
}
※本题的关键在于由于要利用到函数的嵌套,但是嵌套过程中需要输入的函数参数的类型却不同,这时就必须用到def file(*args)
的参数类型,将参数打包再在函数体内拆包实现多型参数的适用,另一个要点是,在用if
进行对输入变量的判定时,不能将判定范围缩小到'str'
上,因为def file(*args)
是将参数打包成元组,而元组内的成员不能被改变,但如果成员是可改变的如同字典或者列表,那么可以通过间接的改变成员的成员从而实现对元组的改变,所以if
的搜索范围要截止到倒数第二层。`
def transfer_score(*score_dict):
if type(score_dict[0])==type({1:1}):
lst=list(score_dict[0].keys())
i=0
if type(score_dict[0][lst[0]])==type('1'):
while i<len(lst):
score_dict[0][lst[i]]=int(score_dict[0][lst[i]])
i+= 1
else:
while i<len(lst):
key=lst[i]
transfer_score(score_dict[0][key])
i += 1
elif type(score_dict[0])==type([1,1]):
i=0
if type(score_dict[0][i])==type({1:1}):
transfer_score(score_dict[0][i])
elif type(score_dict[0][i])==type('1'):
while i<len(score_dict[0]):
score_dict[0][i]=int(score_dict[0][i])
i += 1
练习题(集合):
- 创建一个空集合,增加
{x,y.z}
三个元素:
s = set()
s.add('x')
s.add('y')
s.add('z')
- 列表
['A','B','A','B']
去重:
lst=['A','B','A','B']
s = set(lst)
lst = list(s)
print(lst)
- 求两个集合
{6, 7, 8}
,{7, 8, 9}
中不重复的元素(差集指的是两个集合交集外的部分):
set_1={6,7,8}
set_2={7,8,9}
set=set_1-set_2
- 求
{'A', 'B', 'C'}
中元素在{'B', 'C', 'D'}
中出现的次数:
set_1={'A','B','C'}
set_2={'A','B','D'}
lst_1=list(set_1)
lst_2=list(set_2)
i=0
while i<len(lst_1):
temp=lst_1[i]
j=0
count=0
while j<len(lst_2):
if temp==lst_2[j]:
count += 1
j += 1
i += 1
print('%c'%temp)
print('Appearance is: %d'%count)
练习题(序列):
- 怎么找出序列中的最大、小值:
☞ 用内置函数max(sub)
和min(sub)
sort()
和sorted()
区别:
sorted
方法会在内存中创建一个新的列表对象并在其中对列表元素进行排序;sort
方法☞直接在原始列表上进行排序;sorted
方法有返回值,sort
方法无返回值。- 怎么快速求1到100所有整数相加之和:
☞用range写1到100的序列,在用求和函数即可。 - 求列表
[2,3,4,5]
中每个元素的立方根:
☞用循环体拎出每个元素,用result = value ** (1 / root)
函数进行开方处理即可。 - 将
[‘x’,‘y’,‘z’]
和[1,2,3]
转成[(‘x’,1),(‘y’,2),(‘z’,3)]
的形式:
☞用zip(iter1 [,iter2 [...]])
函数压缩即可。