我是Python的初学者,所以如果我的问题非常基本或明显,我提前道歉。我正在尝试编写一个名为 find(my_list, value)
的函数,它接受一个列表和一个值作为参数。该函数在列表中搜索值并返回在列表中第一次出现该值的索引。如果在列表中找不到该值,我希望该函数返回 -1。
问题是我无法使用除 range()
和 str()
之外的任何内置函数。我也无法使用 quit()
或 exit()
或 break
或 return
语句退出循环。
我正在尝试使用“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/