Python :: Aufgabe #304

3 Lösungen Lösungen öffentlich

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ß

Lösungen:

vote_ok
von Klaus (1780 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)
vote_ok
von nitnat (360 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))
vote_ok
von vMaex (480 Punkte) - 30.01.2021 um 13:24 Uhr
Quellcode ausblenden Python-Code
arr1 = [1, 2, 3]
arr2 = [4, 5, 6]


def median():
    master_arr = arr1 + arr2
    master_arr.sort()

    if master_arr == []:
        print('Der Meridian ist: 0')
    else:
        laenge = len(master_arr)
        gerade_ungerade = laenge/2
        gerade_ungerade = str(gerade_ungerade).find('.5')

        if gerade_ungerade == -1:
            meridian2 = laenge // 2
            meridian1 = meridian2 - 1
            ergebnis = (master_arr[meridian1] + master_arr[meridian2]) / 2
            print('Der Meridian ist:', ergebnis)
        else:
            ergebnis = master_arr[int(laenge/2 - 0.5)]
            print('Der Meridian ist:', ergebnis)

median()
1033550

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.