python - 如何使用 boolean 值退出 'for' 循环?

标签 python list boolean

我是Python的初学者,所以如果我的问题非常基本或明显,我提前道歉。我正在尝试编写一个名为 find(my_list, value) 的函数,它接受一个列表和一个值作为参数。该函数在列表中搜索值并返回在列表中第一次出现该值的索引。如果在列表中找不到该值,我希望该函数返回 -1。

问题是我无法使用除 range()str() 之外的任何内置函数。我也无法使用 quit()exit()breakreturn 语句退出循环。

我正在尝试使用“for”循环方法以及 boolean 语句(以控制何时停止循环)。我认为我走在正确的轨道上,但相信我的实现存在问题。当列表中的值不在时,我得到了所需的输出(-1)。但是,当该值位于列表中时,我似乎无法获得所需的输出。任何指导将不胜感激。

    def find(my_list, value):

        index = 0
        valid = False

        if value != my_list:
            found = -1

        for element in my_list:
            if element == value:
                valid = True
                found = index

        else: 
            index += 1

    return found

列表:

    str_list1 = ['r', 'i', 'n', 'g', 'i', 'n', 'g']

调用函数:

    print(list_function.find(str_list1, 'g'))
    print(list_function.find(str_list1, 'z'))

预期输出:

    3
    -1

最佳答案

您的缩进已关闭。您打算else转到属于if语句,但它实际上绑定(bind)到for循环,这意味着index 仅在循环自然退出时递增(始终如此,因为您没有任何其他方式退出循环(break 语句或 return 语句)。

def find(my_list, value):
    index = 0
    for element in my_list:
        if element == value:
            return index
        else:
            index += 1

    # If we get here, no match was found
    return -1

请注意,我们不需要valid

更简洁的编写方法是使用 enumerate,它会为您生成索引。

def find(my_list, value):
    for index, element in enumerate(my_list):
        if element == value:
            return index

    # If we get here, no match was found
    return -1

更新:如果您无法尽早跳出循环,则确实需要 valid,尽管您仍然需要保持索引与当前索引分开返回。 (我猜你也不能使用enumerate。)

def find(my_list, value):
    answer = -1
    index = 0
    for element in my_list:
        if element == value:
            answer = index
        index += 1
    
    return answer

如果出现多次,这将返回找到的最后值的索引。要返回第一个实例,您需要检查 answer 是否已从默认值 -1 更改。

def find(my_list, value):
    answer = -1
    index = 0
    for element my_list:
        if answer == -1 and element == value:
            answer = index
        index += 1
    
    return answer

    

关于python - 如何使用 boolean 值退出 'for' 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67518585/

相关文章:

r - 将值向量附加到 R 中的键值列表

python - 在 python 中,是否有某种映射来返回类型的 "False value"?

python - 使用 BeautifulSoup 在 HTML 中搜索和替换

python - 为什么信号处理程序中的打印操作可能会改变死锁情况?

python - 时变频率的频谱图与标度图

python - SQLAlchemy 反射 : How do I query data from specific columns?

c# - 在 List<string> 中搜索字符串 .StartsWith()

C# 单元测试列表

javascript - 为什么这段代码没有按预期工作?

C# bool是原子的,为什么volatile有效