Python :: Aufgabe #304 :: Lösung #2

4 Lösungen Lösungen öffentlich
#304

Median zweier zusammengefügter Arrays

Fortgeschrittener - Python von JKooP - 21.11.2020 um 07:46 Uhr
Es soll der Median (Zentralwert) eines sortierten Arrays,
das aus zwei (beliebig großen) zusammengefügten sortierten Arrays besteht, ermittelt werden.

Beispiele:
arr1 = [1, 3] arr2 = [2]
mergeSorted = [1, 2, 3] -> Median = 2

arr1 = [2, 4] arr2 = [1, 3]
mergeSorted = [1, 2, 3, 4] -> Median = 2.5
(wenn kein Zentralwert vorhanden ist, dann wird das arithmetische Mittel der beiden mittleren Zahlen ermittelt)
-> (2+3) / 2 = 2.5

Weitere Beispiele:
[0, 0] [0, 0] -> 0
[] [4] -> 4
[3] [] -> 3
[] [] -> 0
[-4, 4] [-2, 1] -> [-4, -2, 1, 4] -> -0.5

Fortgeschrittene können die Funktion/Methode dahingehend erweitern,
sodass sowohl mindestens 2 Arrays aufgenommen werden,
als auch auch ein Array bzw. eine Liste von Arrays verarbeitet werden kann.


Viel Spaß
#2
vote_ok
von nitnat (670 Punkte) - 11.12.2020 um 20:20 Uhr
Quellcode ausblenden Python-Code
from math import *
from statistics import*

# Funktionen 


def eingabe(l):
    
    merged_l = []
    if type(l[0]) is list:
        for i in range(len(l)):
            merged_l.extend(l[i])
        return merged_l
    else:
        return l
    

def median_kompliziert(a):
    
    a.sort()
    if (len(a) % 2) != 0:
        med = a[floor(len(a) / 2)]
    else:
        med = (a[int(len(a) / 2)] + a[int((len(a) / 2) - 1)]) / 2
    return med


def median_einfach(a):
    
    return median(a)


# Testdaten

arr1 = [5, 99, 1, 3, 4, 7, 123]
arr2 = [2, 8, 5, 68]
arr3 = [3, 4, 5, 6, 7, 785, 23423]
arr4 = [99999, 845, 525, -987]

# Aufruf der Funktionen zur Kontrolle

x = eingabe(arr1)
y = eingabe([arr1, arr2])
z = eingabe([arr1, arr2, arr3, arr4])

print(x, median_kompliziert(x), median_einfach(x))
print(y, median_kompliziert(y), median_einfach(y))
print(z, median_kompliziert(z), median_einfach(z))

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1988081

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.