繁体   English   中英

带有for循环的Python列表迭代

[英]Python list iteration with for loop

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

但是,我的代码似乎早就停止执行:输入中的一个数字小于另一个数字时,就会立即停止执行。

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))

这是一个缩进问题。 当前,只要if b < smallest小块运行,您的return语句就会发生。 那可能不是您想要的。 您需要取消缩进以使其与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

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

您有一个缩进错误:您在for循环中返回的是smallest的,因此执行在满足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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM