hallo, ich bin nochmal. also ich würd gern aus fünf zahlen den zentralen wert haben. also zb.
89, 4, 12, 56, 2
jetzt muss ich das ja ersteinmal ordnen.
dann fang ich so an:
n=5
x=[0]*n
for i in range(n):
>>x=input
for in oin range(n):print x
irgenwie weiß ich nicht, ob das jetzt so richtig ist, und wie ich weitermachen soll...
also jetzt nur vom sehen ist der median natürlich die zahl 12.
ich muss irgendwie einen befehl haben, der mir sagt, dass die 3. zahl der median ist.
vielleicht könnte man erst die hälfte nehmen und dann +1?
kann mir da jemand bitte nochmal zur hilfe kommen?
vielen dank
lg
median- zentralwertberechnung
Hallo,
ungetestet (und wahrscheinlich viel zu kompliziert):
Gruß, Whitie
ungetestet (und wahrscheinlich viel zu kompliziert):
Code: Alles auswählen
l = [89, 4, 12, 56, 2]
l.sort()
count = len(l)
if count % 2:
median = l[int(count/2+0.5)]
else:
median = (l[int(count/2)] + l[int(count/2+1)]) / 2
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Hi astrid!
Also inetwa so:
[passt das?]
Gruß, jj
edit: zu spät, naja, ne noch kompliziertere alternat. version
edit2 @ Whitie: "l[int(count/2+0.5)]" versteh ich irgendwie nicht. Hebt sich da "+0.5" und das int nicht wieder auf? Und wenn nicht, wärs ja auch schlimm, weil nen float-index bringts ja auch nicht...
Jap, genau so machst du das. Dabei musst du jedoch beachten, das die Menge, fallst du nicht immer nur diese Zahlen berechnen willst, auch grade sein kann. Zudem musst du mit floats rechnen, sonst gibt das bei graden Anzahlen nix.astrid hat geschrieben: vielleicht könnte man erst die hälfte nehmen und dann +1?
Also inetwa so:
Code: Alles auswählen
for x in ((1.0,2.0,3.0,4.0,5.0, 6.0),(1.0,2.0,3.0,4.0,5.0)):
if len(x)%2==0:
print "grade:"
print (x[int(len(x)/2)]+x[int(len(x)/2-1)])/2
else:
print "ungrade:"
print x[int(len(x)/2)]
Gruß, jj
edit: zu spät, naja, ne noch kompliziertere alternat. version
edit2 @ Whitie: "l[int(count/2+0.5)]" versteh ich irgendwie nicht. Hebt sich da "+0.5" und das int nicht wieder auf? Und wenn nicht, wärs ja auch schlimm, weil nen float-index bringts ja auch nicht...
Hi schlangenbeschwörer,schlangenbeschwörer hat geschrieben:edit2 @ Whitie: "l[int(count/2+0.5)]" versteh ich irgendwie nicht. Hebt sich da "+0.5" und das int nicht wieder auf? Und wenn nicht, wärs ja auch schlimm, weil nen float-index bringts ja auch nicht...
die ungerade Länge durch zwei ergibt ja immer x.5. Würde ich das per int() umwandeln, hätte ich nur x und nicht x+1. Lasse ich int() weg, gibt es einen Fehler, dass ich einen Float als Index angebe.
Aber gehen würde auch:
Code: Alles auswählen
median = l[int(count/2)+1]
hallo ihr lieben,
hab mal all eure sachen ausprobiert. leider geht nix von alle dem.
also das mit dem sort war sehr gut. aber irgendwie passt das mit dem /2+1 nicht so recht. kann man da nix machen, dass man die dritte zahl ausgibt?
lg
hab mal all eure sachen ausprobiert. leider geht nix von alle dem.
also das mit dem sort war sehr gut. aber irgendwie passt das mit dem /2+1 nicht so recht. kann man da nix machen, dass man die dritte zahl ausgibt?
lg
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Wie wärs damit
Wie wärs damit
Code: Alles auswählen
l = [89, 4, 12, 56, 2]
l.sort()
count = len(l)
if count % 2:
median = l[count/2]
else:
median = (l[count/2-1] + l[count/2]) / 2.0
print median
Hallo,
ich habs nochmal ein bißchen geändert. Mein +1 war natürlich Mist, da der Listenindex ja bei 0 anfängt.
Ich denke das ist eine ganz gute Lösung mit der Kopie der Liste, da man evtl. mit den unsortierten Werten weiterarbeiten möchte.
Gruß, Whitie
ich habs nochmal ein bißchen geändert. Mein +1 war natürlich Mist, da der Listenindex ja bei 0 anfängt.
Code: Alles auswählen
def median(data):
sorted_data = data[:]
sorted_data.sort()
count = len(sorted_data)
if count % 2:
return sorted_data[count/2]
else:
return (sorted_data[count/2-1] + sorted_data[count/2]) / 2.0
# Ergebnis: 12
print median([89, 4, 12, 56, 2])
# Ergebnis: 13
print median([89, 4, 12, 56, 2, 14])
Gruß, Whitie