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

2024-05-08 01:26:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: 代码inforindexreturnifdef数字
3条回答

为此,只需迭代可用的索引,而不是列表中的项。可以通过根据列表的长度生成一个range()iterable对象来实现这一点。然后你将x的所有发生率改为第一个[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

有一种更有效的方法可以做到这一点,但是你的方法已经足够有效了。你知道吗

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

此方法使用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

这也适用于不支持订阅的序列,例如生成器。一个项目在一个废弃的生成器中的位置是否有用还存在争议,但是我想对于一个有限的生成器可能有一些用例。这段代码将处理所有iterables,如果向它传递一个空序列,它就不会崩溃。你知道吗

相关问题 更多 >