不分南北东西 发表于 2020-12-31 11:27:42

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作为两个列表参数,难道不需要在函数内部先赋值吗?

洋洋痒 发表于 2020-12-31 11:27:43

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)

小伤口 发表于 2020-12-31 12:25:34

你到不如不悬赏
最佳都有3个鱼币{:10_277:}
还加两荣誉一技术值呢

洋洋痒 发表于 2020-12-31 12:44:44

标红部分每句代码实现的目的是排序
2.return语句在这段代码中有什么作用?结束函数
l,b作为两个列表参数,难道不需要在函数内部先赋值吗 不需要

不分南北东西 发表于 2020-12-31 14:05:47

小伤口 发表于 2020-12-31 12:25
你到不如不悬赏
最佳都有3个鱼币
还加两荣誉一技术值呢

现在对规则还不是太明白{:5_96:}

byfox 发表于 2020-12-31 16:17:55

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.传参就是赋值,不需要再赋值了。
这个函数语法简洁,算法上也比冒泡要优秀

不分南北东西 发表于 2021-1-2 15:15:26

byfox 发表于 2020-12-31 16:17
1.红色部分实现sortedLists生成与排序:
def insert(l, b):# l为一个列表其实就是sortedLists,b是存放 ...

感谢大神,讲得很明白,谢谢
页: [1]
查看完整版本: python 插序排列问题求助