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:
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)
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))
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()
"""
#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()
