带有for循环的Python列表迭代

时间:2012-11-12 23:20:49

标签: python python-3.x

我正在尝试输入数字,我希望我的函数返回最小的数字。

然而,我的代码似乎提前停止执行:只要输入中的一个数字小于另一个数字。

a = input("")
smallest = 0
a = a.split(" ")
numbers = a

def smallestindex(numbers):
    for i in range(len(numbers)):
        b = int(numbers[i])
        smallest = int(numbers[0])
        print(b)
        if b < smallest:
            smallest = b
            return smallest

print (smallestindex(numbers))

3 个答案:

答案 0 :(得分:4)

这是一个缩进问题。目前,只要return块运行,就会发生if b < smallest语句。这可能不是你想要的。你需要取消它与你的for语句处于同一级别,以便它在循环结束后运行,而不是在中间。

您还需要将初始化smallest的行移动到函数顶部,而不是在循环的每个循环中发生。这应该是这样的:

def smallestindex(numbers):
    smallest = int(numbers[0])    # moved this line up
    for i in range(len(numbers)):
        b = int(numbers[i])
        print(b)
        if b < smallest:
            smallest = b
    return smallest   # unindented this line

值得注意的是,循环可能会略有不同。您可以使用range(len(numbers))直接遍历列表项,而不是循环遍历列表的索引(使用for b in numbers)。

答案 1 :(得分:1)

您有一个缩进错误:您在smallest循环内返回for,因此在第一次迭代中,执行会在满足if条件的循环中停止。循环完成后,您需要返回结果。此外,您每次循环都会重置smallest,因此您的if数据块将无法执行您的操作。这是一个固定版本:

def smallestindex(numbers):
    smallest = int(numbers[0])
    for i in range(len(numbers)):
        b = int(numbers[i])
        print(b)
        if b < smallest:
            smallest = b
    return smallest

答案 2 :(得分:0)

如果您希望按函数名称建议返回最小数字的索引,则需要将代码更改为此类

def smallestindex(numbers):
    numbers = [int(x) for x in numbers] # convert numbers to list of ints
    smallest_idx = 0
    smallest = numbers[0]
    for i, b  in enumerate(numbers):
        if b < smallest:
            smallest_idx = i
            smallest = b
    return smallest_idx