2016-02-11 93 views

回答

3

变化return minimumreturn first.index(minimum)

或者使用

def index_smallest(first): 
    return first.index(min(first)) 

演示:

>>> first = [1, 0, -1, 3] 
>>> first.index(min(first)) 
2 
+2

警告:对于超大型长的列表,或者如果你要处理数以百万计的列表中,其中只需要遍历列表一次,而不是两次(在最坏的情况下)的解决方案优越。 – timgeb

1

对于这个刚刚遍历可用的指标,而不是在列表中的项目。您可以通过根据列表的长度制作range()可迭代对象来实现此目的。然后你改变X的所有occurrances是第一[X]代替或每次抢项目,像这样:

def index_smallest(first): 
    minimum = first[0] 
    min_index = 0 
    for i in range(len(first)): 
     x = first[i] 
     if x < minimum: 
      minimum = x 
      min_index = i 
    return min_index 

有这样做更有效的方式,但你的工作方式不够好。

0

可能有多次出现的最小数字。在这种情况下,这将返回第一次出现。

def index_smallest(numList): 
    return numList.index(min(numList)) 
1

该方法使用emuerate()来提供每个项目的索引。它只需要一遍整个序列。它返回最小值的第一个项目的索引,如果序列为空,则返回None

from operator import itemgetter 

def index_smallest(seq): 
    value = itemgetter(1) 
    try: 
     return min(enumerate(seq), key=value)[0] 
    except ValueError as exc: 
     return None 

>>> index_smallest('') is None 
True 
>>> index_smallest([10, 20, 1, -10, 32]) 
3 
>>> index_smallest((i for i in [10, 20, 1, -10, 32])) # generator expression 
3 
>>> index_smallest('qwerty') 
2 
>>> index_smallest(iter('qwerty')) 
2 

这也适用于不支持下标的序列,例如,发电机。一个物品在废发电机中的位置是否有任何用处是值得商榷的,但我想可能有一些用于有限发电机的用例。这段代码将处理所有可迭代的数据,并且如果将一个空序列传递给它,它将不会炸毁。

-1

你可以先做的是拿数字列表并找到最大的成员。 然后,您可以使用.index()方法获取相应的索引。 例如:

my_numbers = [1,2,3,4,5,6] 
greatest_number = max(my_numbers) 
greatest_number_index = my_numbers.index(greatest_number) 
print(greatest_number_index, greatest_number) 
+0

OP想要_minimum_值的索引,而不是最大值。 – mhawke

+0

对不起,我只是举一个例子,所有OP会想要做的是交换最大的最小。 – Seekheart

+0

在这种情况下,您的答案已经发布了两次。 – mhawke