这是我的功能:
def listMaxInd(l):
max_val = l[0]
maxIndex = 0
count_assigment = 1
count_comparison = 0
for i in range(1,len(l)):
count_comparison=count_comparison+1
if l[i]>max_val:
max_val=l[i]
maxIndex=l.index(max_val)
count_assigment = count_assigment + 1
return maxIndex,count_assigment,count_comparison
我想通过 分配索引来找到列表的最大值,而不是通过赋值来找到。
在我的版本中,我仍在分配值。没有这个可以找到最大值吗?
答案 0 :(得分:2)
如果你需要使用一个循环并且不能使用max()
函数,那么你至少要分配指向目前为止找到的最大值的索引:
max_index = 0
for i, value in enumerate(l):
if value > l[max_index]:
max_index = i
当循环完成时,max_index
指向l
中的最大值(第一次出现)。 enumerate()
是一种在循环中生成索引的更紧凑和有效的方法,以及迭代的值。
更有效的方法是使用带有密钥的max()
函数:
max_index = max(range(len(l)), key=l.__getitem__)
这将返回列表l
中最大值的(第一个)索引;给定一个索引列表(range(len(l))
),它会找到l.__getitem__()
返回最高值的索引。