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
尝试编写一个返回给定列表中最小数字索引的常规函数,如果列表为空,则返回-1但是我收到一条错误,指出:TypeError:list indices必须是整数或切片,而不是列表
我知道有更简单的方法,包括使用min方法,但我想用for循环方法实现这一点 任何指导都会有所帮助
答案 0 :(得分:0)
更简单的解决方案是使用list
对象的.index()
方法
def index_of_smallest(list_nums):
if not(list_nums):
return -1
else:
return list_nums.index(min(list_nums))
用法:
>> index_of_smallest( [1,2,3,0,5,9] )
# 3
>> index_of_smallest( [] )
# -1
您的错误是由于命名空间管理不当造成的。通常,您应该避免使用非描述性变量,例如i
,因为它们无法帮助我们理解代码,并且太容易被意外误用。
在...range(len(list_nums[i]...
中,您要将列表list_nums
与另一个list
建立索引,这会提升TypeError
。不确定你在那里做什么抱歉。
下面,您使用i[i]
,如果有效,则会非常混乱。尽管如此,对迭代器使用单个字符变量很常见,但仅限于那些范围仅限于非常窄的for
循环或列表理解的人。
答案 1 :(得分:-1)
更简单的解决方案可能是:
def index_of_smallest(list_nums):
if(list_nums):
return list_nums.index(min(list_nums))
else:
return -1
做什么:如果list为空,则返回-1( else part ),否则它将在给定列表中找到最小值( min( list_nums))然后找到列表中最小元素的索引( list_nums.index(min(list_nums)))