2024-05-08 01:26:46 发布
网友
如何使代码返回最小数字的索引,而不是仅返回最小数字?这是我写的:
def index_smallest(first): minimum = first[0] for x in first: if x < minimum: minimum = x return minimum
为此,只需迭代可用的索引,而不是列表中的项。可以通过根据列表的长度生成一个range()iterable对象来实现这一点。然后你将x的所有发生率改为第一个[x],或者每次抓取该项,如下所示:
range()
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)。你知道吗
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。你知道吗
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,如果向它传递一个空序列,它就不会崩溃。你知道吗
为此,只需迭代可用的索引,而不是列表中的项。可以通过根据列表的长度生成一个
range()
iterable对象来实现这一点。然后你将x的所有发生率改为第一个[x],或者每次抓取该项,如下所示:有一种更有效的方法可以做到这一点,但是你的方法已经足够有效了。你知道吗
将
return minimum
更改为return first.index(minimum)
。你知道吗或使用
演示:
此方法使用
emuerate()
提供每个项的索引。它只需要一次。它返回具有最小值的第一项的索引,如果序列为空,则返回None
。你知道吗这也适用于不支持订阅的序列,例如生成器。一个项目在一个废弃的生成器中的位置是否有用还存在争议,但是我想对于一个有限的生成器可能有一些用例。这段代码将处理所有iterables,如果向它传递一个空序列,它就不会崩溃。你知道吗
相关问题 更多 >
编程相关推荐