Python 为什么这段代码需要很长时间才能运行?
我有一张单子Python 为什么这段代码需要很长时间才能运行?,python,list,Python,List,我有一张单子 [4,73,67,38,33] 我想通过使用名为gradingStudents的函数来汇总这个列表。代码是这样的 def gradingStudents(grades): for grade in grades: if grade < 38: grades.append(grade) else: roundgrade = round(grade/5)*5 if ro
[4,73,67,38,33]
我想通过使用名为gradingStudents的函数来汇总这个列表。代码是这样的
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)
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
def分级学生(年级):
按年级划分的年级:
如果等级<38:
等级。附加(等级)
其他:
圆形坡度=圆形(坡度/5)*5
如果圆形坡度-坡度<3:
等级。附加(圆形等级)
其他:
等级。附加(等级)
返回等级
等级=[]
分级学生([4,73,67,38,33])
印刷品(等级)
预期输出如下所示
[4,75,67,40,33]
问题是代码确实需要很长时间才能运行。我刚才犯了什么错误?你能猜出来吗?你在做这个:
for each grade in grades:
grades.append(...)
这将贯穿您的列表,并不断追加和延长它(这不是您想要的:您从五个列表开始,希望以五个列表结束)
所以您应该这样做:(伪代码)
这样,您将替换列表中的项目,而不是追加。我的函数出错了。 代码应该是这样的
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)
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
它将如我所期望的那样工作使您的生活更轻松,并分离列表创建/修改部分和重新计算部分 为预期的重新计算创建一个函数:
def round_grade(grade):
if grade >= 38:
rounded = round(grade / 5) * 5
if rounded - grade < 3:
return rounded
return grade
看起来您正在循环浏览一个不断增长的列表,因为您正在添加该列表。
grades
函数中的grades
与grades=[]
中的grades
不同小心:您的问题是“我想汇总此列表”,这意味着您的解决方案需要修改现有列表(因此我在回答中提出了这个建议)。你正在做的是制定一个新的清单。这可能适合你目前的情况,但在某些情况下,这并不是你所要求的。
grades = [4, 73, 67, 38, 33]
new_grades = list(map(round_grade, grades)) # [4, 75, 65, 40, 33]