python 插序排列问题求助
各位大神,小白求助!我在学习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>b:
l.insert(i,b)
return
i += 1
l.append(b)
print("排序前:",students)
for k,v in students.items():
insert(sortedLists,)
print("排序后:",sortedLists)
我的问题如下:
1.标红部分每句代码实现的目的是什么?
2.return语句在这段代码中有什么作用?
3.l,b作为两个列表参数,难道不需要在函数内部先赋值吗?
for k,v in students.items():
insert(sortedLists,)关键是这两句
是把原字典的每个键值对组成一个列表作为函数的b参数
最开始sortedLists作为函数的l参数是空的所以不会执行函数的
for x in l:
if x>b:
l.insert(i,b)
return
直接执行最后一句sortedLists.append(b),把字典第一个键值对加进列表里
然后字典第二个键值对的值如果比第一个值小的话,就会执行if语句,在sortedLists位置0处加进第二个键值对,这个时候return就起作用了,下边的函数不再执行了,是的,函数结束了。
但是如果第二个键值对的值如果比第一个值大的话,就不会执行if语句中的内容,直接执行l.append(b),在列表的末尾加b
以此类推,每一次insert(l,b)都是把和之前的值做对比。
v值比之前的都大就不会执行if语句,在列表的末尾加进去
v值比某个地方的小就会执行if语句,并在这个地方之前加进去(i 值控制),并且由于return控制不会执行l.append(b) 你到不如不悬赏
最佳都有3个鱼币{:10_277:}
还加两荣誉一技术值呢 标红部分每句代码实现的目的是排序
2.return语句在这段代码中有什么作用?结束函数
l,b作为两个列表参数,难道不需要在函数内部先赋值吗 不需要 小伤口 发表于 2020-12-31 12:25
你到不如不悬赏
最佳都有3个鱼币
还加两荣誉一技术值呢
现在对规则还不是太明白{:5_96:} 1.红色部分实现sortedLists生成与排序:
def insert(l, b):# l为一个列表其实就是sortedLists,b是存放一对key和value的列表
i = 0
for x in l:# 对l进行循环
if x > b:# x相当于l,把它与b比较
l.insert(i, b)# 如果b>l,就把b插入到l的位置
print(l)
return
i += 1
l.append(b)# 如果b比l中的所有的成绩都大,就把b放l最后边
通过这个函数就实现了sortedLists生成与排序
2.return结束函数,因为b已经插入到合适的位置,继续循环就没有意义了
3.传参就是赋值,不需要再赋值了。
这个函数语法简洁,算法上也比冒泡要优秀
byfox 发表于 2020-12-31 16:17
1.红色部分实现sortedLists生成与排序:
def insert(l, b):# l为一个列表其实就是sortedLists,b是存放 ...
感谢大神,讲得很明白,谢谢
页:
[1]