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

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ß
#1
vote_ok
von Klaus (1960 Punkte) - 30.11.2020 um 21:03 Uhr
Quellcode ausblenden Python-Code
test_data = [
    [[1, 3], [2]],
    [[2, 4], [1, 3]],
    [[0, 0], [0, 0]],
    [[], [4]],
    [[3], []],
    [[], []],
    [[-4, 4], [-2, 1]]    
]

def median(list_of_arrays):
    combined_array = []
    print('arrays = ', end='')
    for array in list_of_arrays:
        print(f'{array} ', end='')
        combined_array += array
    combined_array.sort()
    print(f'\nmerged sorted array = {combined_array}')
    if not combined_array:
        median = 0
    elif len(combined_array) == 1:
        median = combined_array[0]
    elif len(combined_array) % 2 == 1:
        median = combined_array[len(combined_array) // 2]
    else:
        median = (combined_array[len(combined_array) // 2 - 1] + combined_array[len(combined_array) // 2]) / 2
    print(f'median = {median}\n')
    
for array in test_data:
    median(array)

Kommentare:

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

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

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.