For循环不在整个列表上迭代

2024-10-04 03:27:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Jupyter notebook中有以下代码,它打印radiuslist,但只迭代resultlist的第一个结果

def areacirclelist(radiuslist):

    for oneradius in radiuslist:
        resultlist = []
        resultlist.append(math.pi*oneradius*oneradius)
        return resultlist

radiuslist = [1,2,4,8,21,80]

arealist = areacirclelist(radiuslist)
print ('For the circle with radii of ', radiuslist, 'the areas are', arealist)

我感谢你的帮助


Tags: the代码infordefpijupytermath
3条回答

您应该将resultlist = []和return语句放在循环之外

def areacirclelist(radiuslist):

    resultlist = []
    for oneradius in radiuslist:
        resultlist.append(math.pi*oneradius*oneradius)
    return resultlist

您需要在for循环之外定义resultlist = []。每次迭代都会覆盖它

编辑:还需要将return语句移到循环之外

def areacirclelist(radiuslist):
    resultlist = []
    for oneradius in radiuslist:
        resultlist.append(math.pi * oneradius * oneradius)
    return resultlist


radiuslist = [1, 2, 4, 8, 21, 80]

arealist = areacirclelist(radiuslist)
print('For the circle with radii of ', radiuslist, 'the areas are', arealist)

resultlist只包含一个数字,因为它是在for循环中初始化的,所以每次迭代都会将其设置为[]

您可以简单地通过将初始化移到for循环之外来修复它

def areacirclelist(radiuslist):
    resultlist = [] # initialize HERE
    for oneradius in radiuslist:
        resultlist.append(math.pi * oneradius * oneradius)
    return resultlist

但是,您可以用更简单易读的方式编写:

def areacirclelist(radiuslist):
    return [math.pi * oneradius * oneradius for oneradius in radiuslist]

相关问题 更多 >