[英]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.