2013-10-05 28 views
1

這裏的最大值是我的函數:查找表(Python)的

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 

我想分配索引找到一個列表的最大值,而不是通過指定的值。

在我的版本I am仍然分配值。沒有這個可以找到最大值嗎?

+0

我試圖讓你的問題可讀並且重點,對不起,如果我們在這裏發生衝突。 –

+0

我試圖解釋清楚嗎?這不可理解嗎? – Tartar

+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__()返回最高值的索引。

+0

我不想使用最大功能。所以我不得不修改這個算法。謝謝你的關注。 – Tartar

+0

值得注意的是,他會得到最大值的_first_索引,而不是最大值出現的索引列表(如果有重複的)? –

+0

@ g.d.d.c:兩種方法都可以。 –