Python3错误:TypeError:列表索引必须是整数或切片,而不是列表 def索引(列表): i=[] 如果len(list_nums)==0: 返回-1 对于范围内的i(len(list_nums[i]-1)): 如果我[i]

Python3错误:TypeError:列表索引必须是整数或切片,而不是列表 def索引(列表): i=[] 如果len(list_nums)==0: 返回-1 对于范围内的i(len(list_nums[i]-1)): 如果我[i],list,python-3.x,for-loop,List,Python 3.x,For Loop,尝试编写一个通用函数,返回给定列表中最小数字的索引,或者如果列表为空,则返回-1,但我收到一个错误,该错误指出:TypeError:列表索引必须是整数或片,而不是列表 我知道有更简单的方法,包括使用min方法,但我想使用for循环方法来实现这一点 任何指导都会有帮助一个更简单的解决方案是使用列表对象的.index()方法 def index_of_smallest(list_nums): i = [] if len(list_nums) == 0: return -1

尝试编写一个通用函数,返回给定列表中最小数字的索引,或者如果列表为空,则返回-1,但我收到一个错误,该错误指出:TypeError:列表索引必须是整数或片,而不是列表

我知道有更简单的方法,包括使用min方法,但我想使用for循环方法来实现这一点

任何指导都会有帮助

一个更简单的解决方案是使用
列表
对象的
.index()
方法

def index_of_smallest(list_nums):
   i = []
   if len(list_nums) == 0:
      return -1
   for i in range(len(list_nums[i] - 1)):
      if i[i] < i[i+1]:
         smallest = i[i]
   return smallest
用法:

def index_of_smallest(list_nums):
    if not(list_nums):
        return -1
    else:
        return list_nums.index(min(list_nums))
其他意见 您的错误是由于命名空间管理不善造成的。通常,您应该避免使用非描述性变量,例如
i
,因为它们不能帮助我们理解代码,而且很容易被意外误用

…范围(len(list_nums[i]…
中,您正在为列表编制索引,
list_nums
与另一个
list
,这会引发
TypeError
。不确定您试图在那里做什么对不起

在下面,您将使用
i[i]
,如果它有效的话,这将非常令人困惑。尽管如此,对迭代器使用单字符变量是常见的,但仅对那些使用范围非常狭窄的
循环或列表理解的人而言


参见

一个更简单的解决方案可能是:

>> index_of_smallest( [1,2,3,0,5,9] )
   # 3

>> index_of_smallest( [] )
   # -1

它的作用:如果列表为空,则返回-1(其他部分),否则它将在给定列表中找到最小值(min(list_nums)),然后在列表中找到最小元素的索引(list_nums.index(min(list_nums)))

1。您不需要带If的括号。2.您可以将代码缩短为
返回int(bool(list_nums))和list_nums.index(min(list_nums))
你可以查找它的作用。3.我更喜欢从操作符import itemgetter;print(min(enumerate([1,2,3]),key=itemgetter(1))[0])
中找到
,这实际上是numpy的
argmin
功能。真诚地说,你曾经“炫耀”过的PESIT的小朋友你薄弱的python技能。哦,你的缩进是错误的。我对你的答案投了反对票,因为它会抛出一个语法错误。
def index_of_smallest(list_nums):
    if(list_nums):
        return list_nums.index(min(list_nums))
else:
    return -1