|
2鱼币
各位大神,小白求助!
我在学习python的时候,有段代码看不懂,麻烦大神解惑!
题目如下:
有一个字典,其中保存着学生的成绩单:
students = { "Harry":87,"Joe":90,"Yolanda":67,"Aaron":88,"Charles":79,"Fred":93}
请将这个成绩单按照成绩的多少,从低到高排列。
标准代码如下:students = { "Harry":87,"Joe":90,"Yolanda":67,"Aaron":88,"Charles":79,"Fred":93}
sortedLists =[]
#插入排序
def insert(l,b):
i=0
for x in l:
if x[1]>b[1]:
l.insert(i,b)
return
i += 1
l.append(b)
print("排序前:",students)
for k,v in students.items():
insert(sortedLists,[k,v])
print("排序后:",sortedLists)
我的问题如下:
1.标红部分每句代码实现的目的是什么?
2.return语句在这段代码中有什么作用?
3.l,b作为两个列表参数,难道不需要在函数内部先赋值吗?
for k,v in students.items():
insert(sortedLists,[k,v])关键是这两句
是把原字典的每个键值对组成一个列表作为函数的b参数
最开始sortedLists作为函数的l参数是空的所以不会执行函数的
for x in l:
if x[1]>b[1]:
l.insert(i,b)
return
直接执行最后一句sortedLists.append(b),把字典第一个键值对加进列表里
然后字典第二个键值对的值如果比第一个值小的话,就会执行if语句,在sortedLists位置0处加进第二个键值对,这个时候return就起作用了,下边的函数不再执行了,是的,函数结束了。
但是如果第二个键值对的值如果比第一个值大的话,就不会执行if语句中的内容,直接执行l.append(b),在列表的末尾加b
以此类推,每一次insert(l,b)都是把[k,v]和之前的值做对比。
v值比之前的都大就不会执行if语句,在列表的末尾加进去
v值比某个地方的小就会执行if语句,并在这个地方之前加进去(i 值控制),并且由于return控制不会执行l.append(b)
|
最佳答案
查看完整内容
for k,v in students.items():
insert(sortedLists,[k,v])关键是这两句
是把原字典的每个键值对组成一个列表作为函数的b参数
最开始sortedLists作为函数的l参数是空的所以不会执行函数的
for x in l:
if x[1]>b[1]:
l.insert(i,b)
return
直接执行最后一句sortedLists.append(b),把字典第一个键值对加进列表里
然后字典第二个键值对的值如果比第一个值小的话,就会执行if语句, ...
|