Seite 1 von 1
hilfe für den häufigsten wert
Verfasst: Montag 19. März 2007, 20:42
von astrid
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
Re: hilfe für den häufigsten wert
Verfasst: Montag 19. März 2007, 20:45
von gerold
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

Verfasst: Montag 19. März 2007, 20:50
von gerold
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

Verfasst: Montag 19. März 2007, 20:55
von sape
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
Verfasst: Montag 19. März 2007, 20:56
von sape
gerold hat geschrieben:Von Leonidas' Beispiel abgekupfert:
Dito

-> ``freq_dict[elem] = freq_dict.get(elem, 0) + 1``
Muss ehrlich sagen das die Variante echt sehr elegant ist

Verfasst: Montag 19. März 2007, 21:15
von astrid
BOW.
man. soviele antworten!!!! so schnell hab ich gar nciht mit gerechnet.
hab in zukunft bestimmt noch mehr fragen
danke danke!!!
lg
Verfasst: Montag 19. März 2007, 21:38
von astrid
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

Verfasst: Montag 19. März 2007, 21:46
von sape
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.
Verfasst: Montag 19. März 2007, 21:50
von sape
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.
Verfasst: Montag 19. März 2007, 22:43
von astrid
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
Verfasst: Montag 19. März 2007, 23:33
von 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?
Verfasst: Montag 19. März 2007, 23:50
von astrid
da steht: error:inconsistent identation detected!
lg

Verfasst: Dienstag 20. März 2007, 00:32
von Leonidas
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.
Verfasst: Dienstag 20. März 2007, 13:00
von astrid
aah. hab den fehler gefunden. und es funzt auch
vielen dank, für die hilfe!!!
