繁体   English   中英

为什么这段代码需要很长时间才能运行?

[英]Why this code takes very long time to run?

我有一个清单[4,73,67,38,33]

我想通过使用名为 gradingStudents 的 function 来整理这个列表。 代码是这样的

def gradingStudents(grades):
    for grade in grades:
        if grade < 38:
            grades.append(grade)
        else:
            roundgrade = round(grade/5)*5
            if roundgrade - grade < 3:
                grades.append(roundgrade)
            else:
                grades.append(grade)
    return grades

grades = []
gradingStudents([4,73,67,38,33])
print(grades)

预期的output是这样的[4,75,67,40,33]

问题是代码确实需要很长时间才能运行。 我刚才犯了什么错误? 你能弄清楚吗?

我在 function 中犯了一个错误。 代码应该是这样的

def gradingStudents(grades):
    result = []
    for grade in grades:
        if grade < 38:
            result.append(grade)
        else:
            roundgrade = round(grade/5)*5
            if roundgrade - grade < 3:
                result.append(roundgrade)
            else:
                result.append(grade)
    return result
print(gradingStudents([4,73,67,38,33]))

它会按我的预期工作

你正在这样做:

for each grade in grades:
  grades.append(...)

这会遍历您的列表并继续添加并使其更长(这不是您想要的:您从五个列表开始,并希望以五个列表结束)。

所以你应该这样做:(伪代码)

for (int i = 0 to grades.length() - 1):
  if grades[i] == ...
  then grades[i] = ...

这样,您将替换列表中的项目而不是追加。

让您的生活更轻松,并将列表创建/修改部分和重新计算部分分开。

为您的预期重新计算创建一个 function:

def round_grade(grade):
    if grade >= 38:
        rounded = round(grade / 5) * 5
        if rounded - grade < 3:
            return rounded
    return grade

然后只需 map 到您列表的所有元素:

grades = [4, 73, 67, 38, 33]
new_grades = list(map(round_grade, grades)) # [4, 75, 65, 40, 33]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM