1

这是我的功能:

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

我想通过仅分配索引而不是分配值来找到列表的最大值。

在我的版本中,我仍在分配值。没有这个是否可以找到最大值?

4

1 回答 1

2

如果您需要使用循环并且不能使用该max()函数,那么您至少要分配指向迄今为止找到的最大值的索引:

max_index = 0
for i, value in enumerate(l):
    if value > l[max_index]:
        max_index = i

当循环完成时,max_index指向 中的最大值(第一次出现)lenumerate()是一种在循环中生成索引以及迭代的值的更紧凑和更有效的方法。

更有效的方法是使用max()带有键的函数:

max_index = max(range(len(l)), key=l.__getitem__)

这将返回 list 中最大值的(第一个)索引l;给定一个索引列表 ( range(len(l))),它会找到l.__getitem__()返回最高值的索引。

于 2013-10-05T21:23:33.333 回答