Python3错误:TypeError:列表索引必须是整数或切片,而不是列表

时间:2017-02-22 04:35:16

标签: list python-3.x for-loop

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循环方法实现这一点 任何指导都会有所帮助

2 个答案:

答案 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循环或列表理解的人。

请参阅this discussion

答案 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))