2017-02-12 69 views
0

假設我有一個列表l=[3,4,4,2,1,4,6] 我想獲取包含元素索引的列表子集,其值爲max(l)。 在這種情況下,索引列表將爲[1,2,5]如何獲取其值爲該列表中最大值的元素的索引列表

我使用這種方法來解決,其中,提供數字列表的問題,例如

l=[1,2,3,4,3,2,2,3,4,5,6,7,5,4,3,2,2,3,4,3,4,5,6,7] 

我需要找出一個元素的最大出現時不過萬一出現超過1元相同的次數, 我需要選擇幅度更大的元素,假設我在l上應用計數器並獲得{1:5,2:5,3:4...},我必須選擇'2'而不是'1'。 請建議如何解決這個

編輯 - 的問題是這樣開始的, 1)列表作爲輸入提供

l=[1 4 4 4 5 3] 

2)我運行這個櫃檯領取的數每個唯一的元件

3)I需要獲得其值是最大的關鍵

4)假設計數器對象包含多個條目,其值是最大的, 在Counter{1:4,2:4,3:4,5:1} 我必須選擇3作爲它的值是關鍵4

使用

5)到目前爲止,我已經能夠獲取計數器對象,我已經分隔鍵/值列表k=counter.keys();v=counter.values()

6)我想得到的索引,其值是最大值在v 如果我運行v.index(max(v)),我得到第一個索引的值匹配的最大值,但我想獲得索引的列表,其值是最大的,這樣我就可以獲得相應的密鑰列表並獲得該列表中的最大密鑰。

+0

你的問題還不清楚,請說清楚你的輸入和想要的輸出。 – Jarvis

+0

你能解釋一下你是如何從「l」到4中的'Counter'字典? – Giridhur

+0

@Giridhur我從集合中導入Counter,並將List作爲參數發送給Counter。這將返回一個Counter對象。在4中,我剛剛使用了一個例子,它可能與1 –

回答

0

隨着長的列表,使用NumPy的或任何其他線性代數將是有益的,否則,你可以簡單地使用任何

l.index(max(l))

max(range(len(l)),key=l)

然而這些只返回一個許多argmax的。

因此,對於你的問題,你可以選擇扭轉數組,既然你想以後出現的最大:

len(l)-l[::-1].index(max(l))-1

+0

n-1 [: - 1] .index(max(l)) - 1中指定的列表無關;請您解釋這個公式嗎?什麼是n –

+0

所以,首先我們找出最大元素的值,然後倒轉列表,找出最大元素的位置,然後得到最大元素的索引。 – Giridhur

0

如果我理解正確的,下面應該做你想要什麼。

from collections import Counter 

def get_largest_most_freq(lst): 
    c = Counter(lst) 
    # get the largest frequency 
    freq = max(c.values()) 
    # get list of all the values that occur _max times 
    items = [k for k, v in c.items() if v == freq] 
    # return largest most frequent item 
    return max(items) 

def get_indexes_of_most_freq(lst): 
    _max = get_largest_most_freq(lst) 
    # get list of all indexes that have a value matching _max 
    return [i for i, v in enumerate(lst) if v == _max] 

>>> lst = [3,4,4,2,1,4,6] 
>>> get_largest_most_freq(lst) 
4 
>>> get_indexes_of_most_freq(lst) 
[1, 2, 5] 
>>> lst = [1,2,3,4,3,2,2,3,4,5,6,7,5,4,3,2,2,3,4,3,4,5,6,7] 
>>> get_largest_most_freq(lst) 
3 
>>> get_indexes_of_most_freq(lst) 
[2, 4, 7, 14, 17, 19] 
+0

解決了! –

+0

@AshwinV如果這解決了您的問題,請隨時接受它。 –

相關問題