如何让我的代码返回最小数字的索引而不是最小数字?这就是我写的:
def index_smallest(first):
minimum = first[0]
for x in first:
if x < minimum:
minimum = x
return minimum
答案 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)