Python :: Aufgabe #304
4 Lösungen
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ß
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:
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)
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))
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()
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()