返回最小数字的索引而不是最小数字

时间:2016-02-11 23:46:40

标签: python

如何让我的代码返回最小数字的索引而不是最小数字?这就是我写的:

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

5 个答案:

答案 0 :(得分:3)

return minimum更改为return first.index(minimum)

或使用

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

演示:

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

答案 1 :(得分:1)

为此,只迭代可用的索引而不是列表中的项目。您可以通过基于列表的长度创建range()可迭代对象来完成此操作。然后你将x的所有出现都改为first [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

有一种更有效的方法可以做到这一点,但你的方式运作良好。

答案 2 :(得分: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

这也适用于不支持下标的序列,例如:发电机。花费在发电机中的项目的位置是否有用是值得商榷的,但我认为有限的发电机可能存在一些用例。此代码将处理所有迭代,如果向其传递空序列,它将不会爆炸。

答案 3 :(得分:0)

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

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

答案 4 :(得分:-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)