首页 > 解决方案 > 函数在应该返回最后一个索引时返回 None

问题描述

我试图让这个函数返回列表中最小值的索引。它适用于所有情况,除非最小值是列表的最后一个元素。谁能发现我的错误?

def rotation_point(rotated_list):
  length = len(rotated_list)
  for i in range (0,length-1):
    if rotated_list[i]<rotated_list[(i+1)%length] and rotated_list[i]<rotated_list[i-1]:
      return i
    else:
      pass

我知道它与 if 语句的第一部分有关,但我不明白为什么它不起作用。

标签: pythonpython-3.xlistmod

解决方案


if 语句本身工作得很好,但你从来没有真正检查过最后一个元素,因为你使用:range(0,length-1)for 循环的范围。该range功能已经停止在length - 1。你应该使用:range(0,length)

请注意,您实际上也不需要0默认范围已经从零开始,并且不需要else: pass使用 else 语句,删除它不会改变任何事情。

这是您的函数的工作(和更清洁)版本的样子:

def rotation_point(rotated_list):
  length = len(rotated_list)
  for i in range (length):
    if rotated_list[i]<rotated_list[(i+1)%length] and rotated_list[i]<rotated_list[i-1]:
      return i

以下是 range 函数的更多示例:

>>> range(0, 5-1)
[0, 1, 2, 3]

>>> range(0, 5)
[0, 1, 2, 3, 4]

>>> range(5)
[0, 1, 2, 3, 4]

推荐阅读