hilfe für den häufigsten wert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
astrid
User
Beiträge: 16
Registriert: Montag 19. März 2007, 20:36

hallo ihr lieben,

ich bin neu hier und würd gerne wissen, ob mir jemand helfen kann bei volgendem programm:

ich möchte aus einer bestimmten anzahl (nehmen wir zb. elf verschiedene zahlen) den häufigsten wert rausbekommen. in diesem fall 1

zahlenbeispiele: 1,1,1,1,7,3,9,3,14,3

wie gehe ich das genau an?


danke im vorraus! :)


lg
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

astrid hat geschrieben:ich möchte aus einer bestimmten anzahl (nehmen wir zb. elf verschiedene zahlen) den häufigsten wert rausbekommen.
Hi astrid!

Willkommen im Python-Forum!

Ziemlicher Zufall? http://www.python-forum.de/topic-9889.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Von Leonidas' Beispiel abgekupfert: ;-)

Code: Alles auswählen

words = ('bla', 'bla', 'blub', 'hallo', 'hallo', "z", "z")
frequencies = dict()
for word in words:
    frequencies[word] = frequencies.get(word, 0) + 1
print max([ (value, key) for (key, value) in frequencies.items() ])
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Hi und willkommen im Forum.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-


def get_value_with_maximum_frequency(iterable):
    freq_dict = dict()
    for elem in iterable:
        freq_dict[elem] = freq_dict.get(elem, 0) + 1
    order = [(v, k) for k, v, in freq_dict.iteritems()]
    order.sort(reverse=True)
    return order[0][1]
    
   
if __name__ == '__main__':
    li = [1,1,1,1,1,3,9,3,14,14,14,14]
    print get_value_with_maximum_frequency(li) # 1
    
    li = [1,1,1,1,1,3,9,3,9,9,9,9,9]
    print get_value_with_maximum_frequency(li) # 9
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

gerold hat geschrieben:Von Leonidas' Beispiel abgekupfert: ;-)
Dito :D -> ``freq_dict[elem] = freq_dict.get(elem, 0) + 1``
Muss ehrlich sagen das die Variante echt sehr elegant ist :)
astrid
User
Beiträge: 16
Registriert: Montag 19. März 2007, 20:36

BOW.
man. soviele antworten!!!! so schnell hab ich gar nciht mit gerechnet.

hab in zukunft bestimmt noch mehr fragen ;)

danke danke!!!


lg
astrid
User
Beiträge: 16
Registriert: Montag 19. März 2007, 20:36

okay, ich habe das jetzt mal abgeschrieben. und irgendwie funzt das nciht so recht. also ich habe das jetzt so verstanden, dass erst geordnet wird, und dann das maximum herausgegeben wird. also das maximum der anzahl der zahlen,ne?
nicht wie in diesem fall die 14, oder?

dann steht beim zweiten teil ja die liste. aber auf einmal ohne die 14. warum?

es tut mir leid, dass ich so blöd frage, aber ich bekomm sonst den dreh nicht raus.


lg :)
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

astrid hat geschrieben:okay, ich habe das jetzt mal abgeschrieben. und irgendwie funzt das nciht so recht. also ich habe das jetzt so verstanden, dass erst geordnet wird, und dann das maximum herausgegeben wird. also das maximum der anzahl der zahlen,ne?
nicht wie in diesem fall die 14, oder?
EDIT: Ne. Im ersten Beispiel ist die eins 5 mal vorhanden und die vierzehn nur 4 mal. Daher wird die 1 zurückgegeben. So hatte ich deine Frage verstanden, das die Zahl die am meisten vorkommt zurückgegeben werden soll.
astrid hat geschrieben: dann steht beim zweiten teil ja die liste. aber auf einmal ohne die 14. warum?
Nur so. Hat kein besonderen hinterrund ;) -- Wollte die Liste nicht zu lang machen.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

BTW: Gib mal folgende liste an die Funktion: li = [1,1,1,1,1,1, 3,5, 9,9,9,9,9,9]

Da 1 und 9 gleichviel vorkommen, wird die höchste Zahl zurückgegeben. Wie genau wolltest du diese Diskrepanz lösen? -- Ich könnte mir verstellen das man dann beide Zahle zurückgibt.
astrid
User
Beiträge: 16
Registriert: Montag 19. März 2007, 20:36

ok, das läuchtet mir ein. nur wird mir die 14. zeile als fehler ausgegeben.
wenn da if steht: muss nicht auch ein else dann irgendwann kommen?
:)

lg
BlackJack

Nein, es gibt ja nicht immer eine Alternative die ausgeführt werden muss. Und Zeile 14 sieht okay aus. Was für einen Fehler bekommst Du denn?
astrid
User
Beiträge: 16
Registriert: Montag 19. März 2007, 20:36

da steht: error:inconsistent identation detected!

lg :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

astrid hat geschrieben:error:inconsistent identation detected!
Dann hast du die Einrückung falsch: Der Text muss wirklich am Anfang der Zeile 14 stehen, sonst geht es nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
astrid
User
Beiträge: 16
Registriert: Montag 19. März 2007, 20:36

aah. hab den fehler gefunden. und es funzt auch :)

vielen dank, für die hilfe!!! :idea:
Antworten