Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这段代码需要很长时间才能运行?_Python_List - Fatal编程技术网

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]