Python :: Aufgabe #304

4 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 (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)
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))
vote_ok
von vMaex (540 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()
vote_ok
von eisheiliger (3750 Punkte) - 30.03.2021 um 16:44 Uhr
Quellcode ausblenden Python-Code

"""
#304: Median zweier zusammengefügter Arrays
Es soll der Median (Zentralwert) eines sortierten Arrays, das aus zwei (beliebig großen)
zusammengefügten sortierten Arrays besteht, ermittelt werden.
"""
import statistics
import numpy as np


def medi(item):
    if not item:
        item.append(0)
    print(np.sort(item), "Median:", statistics.median(item))


def main():
    medi([1, 3] + [2])
    medi([2, 4] + [1, 3])
    medi([0] + [0])
    medi([] + [4])
    medi([3] + [])
    medi([] + [])
    medi([-4, 4] + [-2, 1])


if __name__ == '__main__':
    main()


1987518

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.