2016-07-27 23 views
-1

Angenommen, ich habe einen listAnzahl der Vorkommen von maximal Elemente in einer Liste

L= [3 2 1 3 5 4 5 3 5 3] 

Output 3 sein sollte als 5 maximal in der Liste als nicht ist. nur das Vorkommens ist 3

ich in der Lage bin diese

from collections import defaultdict 

d = defaultdict(int) 
for i in height: 
    d[i] += 1 
result = max(d.iteritems(), key=lambda x: x[1]) 
print len(result) 

bis jetzt versuchen, aber dies für jede Liste funktioniert nicht wie es ist maximale Vorkommen eines Elements in einer Liste zu geben, aber manchmal ist es nicht maximal Artikel.

+0

Also, was haben Sie bisher versucht, und wo ist das Problem? – Sirko

+0

Wie ist es, zuerst das Max-Objekt zu finden und dann seine Vorkommen zu zählen? – Yaron

+2

Wenn es eine Liste ist, sollte so einfach sein wie die Kopplung 'max' mit' list.count' ... – mgilson

Antwort

3

Verwenden max und list.count:

max_element= max(L) 
count= L.count(max_element) 
print(count) 
+0

Dies kann langsamer sein als die OP-Ansatz und Sie nicht ganz darauf an, warum der OP-Ansatz gescheitert ist (es war nur * leicht * falsch) . –

+0

@MartijnPieters Ich weiß, ich weiß. Ich hatte nicht vor, überhaupt eine Antwort zu posten, aber da niemand die offensichtlichste Lösung für das Problem gepostet hatte, bin ich aufgesprungen, um ein paar freie Worte zu bekommen. Aber um fair zu sein, ich glaube nicht, dass es nötig war zu erklären, warum der Code von OP nicht funktioniert hat. OP selbst sagte _ "das funktioniert nicht für jede Liste, da es nur maximale Vorkommen eines Items gibt" _. –

+0

Natürlich muss man das erklären; Sie versuchen herauszufinden, warum es nicht funktioniert. Gib dem OP nicht einfach einen Fisch, lehre ihn, wie du ihn gefangen hast und warum nicht. –

1

prüft dieser Code: -

L= [3, 2, 1, 3, 5, 4, 5, 3, 5, 3] 
newDict = {} 
for i in L: 
    newDict.setdefault(i,0) 
    newDict[i]+=1 

filter(lambda x : (newDict[x] == max(newDict.values())) ,newDict)[0] 
+0

Es ist nicht notwendig, '.keys()' aufzurufen; iteriere direkt über 'newDict'. –

+0

Und warum die Verwendung von 'collections.defaultdict' fallen lassen? Sie erklären auch nicht, wo das OP schief gelaufen ist. –

+0

@MartijnPieters yes es ist, Danke –

2

Sie wurden die maximale Zahl, eher als die maximalen Artikel Kommissionierung. Man könnte dies das key Argument max() durch Eintropfen gelöst hat, und dann drucke nur das Ergebnis (nicht die Länge davon, das wird immer 2 sein!):

result = max(d.iteritems()) 
print result # prints the (maxvalue, count) pair. 

Alternativ Druck result[1] nur zu Drucke die Anzahl für den maximalen Wert aus.

Verwenden Sie ein collections.Counter() object Ihre Objekte zu zählen, dann findet das maximale Schlüsselwertpaar, dass:

from collections import Counter 

counts = Counter(L) 
max_key, max_key_count = max(counts.iteritems()) 
print max_key_count 

wie die eigenen, das ist ein O (KN) Ansatz, wobei K die Länge L ist und N ist die Anzahl der eindeutigen Elemente. Dies ist etwas effizienter als der max_element = max(L); count = L.count(max_element)-Ansatz, da es die Schleife zweimal über L vermeidet. Welcher in der Praxis schneller ist, hängt davon ab, wie viel kleiner N zu K ist.

Verwandte Themen