Hallo,
gibt es eine effiziente Möglichkeit um zu prüfen ob bspw. 5 Zahlenwerte eines arrays in Reihe gleich sind? Wert und Position sind unbekannt.
Besten Dank!
Array prüfen ob Werte in folge gleich sind
Array oder Liste?
Die ersten 5? Hat die Liste nur 5 Elemente insgesamt? Wenn du einfach nür prüfen willst ob die gesuchte Sequenz irgendwo in der Liste vorkommt würde ich das so machen, dafür ist die Sequenz die gesucht wird aber erforderlich:
Das ganze kann man auch noch in eine Funktion packen:
Die ersten 5? Hat die Liste nur 5 Elemente insgesamt? Wenn du einfach nür prüfen willst ob die gesuchte Sequenz irgendwo in der Liste vorkommt würde ich das so machen, dafür ist die Sequenz die gesucht wird aber erforderlich:
Code: Alles auswählen
numbers = [1,2,3,4,5,6,7]
sequenz_to_look_for_1 = [3,5,6]
sequenz_to_look_for_2 = [2,3,4,5]
print("".join([str(number) for number in sequenz_to_look_for_1]) in "".join([str(number) for number in numbers]))
print("".join([str(number) for number in sequenz_to_look_for_2]) in "".join([str(number) for number in numbers]))
Code: Alles auswählen
numbers = [1,2,3,4,5,6,7]
sequenz_to_look_for_1 = [3,5,6]
sequenz_to_look_for_2 = [2,3,4,5]
def check_if_sequenz_is_in_list(list, sequenz):
return "".join([str(number) for number in sequenz]) in "".join([str(number) for number in list])
print(check_if_sequenz_is_in_list(numbers, sequenz_to_look_for_1))
print(check_if_sequenz_is_in_list(numbers, sequenz_to_look_for_2))
Zuletzt geändert von Jankie am Donnerstag 3. September 2020, 10:05, insgesamt 2-mal geändert.
Code: Alles auswählen
In [1]: import numpy as np
In [2]: werte = np.random.random(30)
In [3]: werte[7:7+5] = werte[7]
In [4]: windows = np.lib.stride_tricks.as_strided(werte, (werte.size - 5 + 1, 5), werte.strides*2)
In [5]: windows.max(axis=1) - windows.min(axis=1)
Out[5]:
array([0.71426446, 0.71426446, 0.80783698, 0.80783698, 0.7449869 ,
0.7449869 , 0.7449869 , 0. , 0.1535455 , 0.28254629,
0.35209247, 0.53512758, 0.53512758, 0.53512758, 0.36881581,
0.43843173, 0.47240975, 0.47240975, 0.34931615, 0.37189768,
0.37189768, 0.37189768, 0.39833713, 0.56927844, 0.44090621,
0.5208942 ])
In [6]: np.where(windows.max(axis=1) - windows.min(axis=1) == 0)
Out[6]: (array([7], dtype=int64),)
Wenn du zwei Listen hast und nur prüfen willst ob irgendwo in den zwei Listen eine folge von 5 Elementen identisch ist:
bzw. so wenn die Anzahl der aufeinanderfolgenden Zahlen variabel ist.
Code: Alles auswählen
numbers1 = [1,2,3,4,5,6,7,8,9,10,11]
numbers2 = [1,2,3,4,5,6,7,8,3,10,11]
def have_similarities(list_a, list_b):
for i in range(len(list_a)):
sublist_a = list_a[i:i+5]
if len(sublist_a) == 5:
for x in range(len(list_b)):
sublist_b = list_b[x:x+5]
if sublist_a == sublist_b:
print("FOUND")
break
have_similarities(numbers1, numbers2)
bzw. so wenn die Anzahl der aufeinanderfolgenden Zahlen variabel ist.
Code: Alles auswählen
numbers1 = [1,2,3,4,5,6,7,8,9,10,11]
numbers2 = [1,2,3,4,5,6,7,7,3,10,11]
def have_similarities(list_a, list_b, sequenz_lenght):
for i in range(len(list_a)):
sublist_a = list_a[i:i+sequenz_lenght]
if len(sublist_a) == sequenz_lenght:
for x in range(len(list_b)):
sublist_b = list_b[x:x+sequenz_lenght]
if sublist_a == sublist_b:
return True
return False
print(have_similarities(numbers1, numbers2, 8))
Klasse, wie immer!Sirius3 hat geschrieben: Donnerstag 3. September 2020, 10:04Code: Alles auswählen
In [1]: import numpy as np In [2]: werte = np.random.random(30) In [3]: werte[7:7+5] = werte[7] In [4]: windows = np.lib.stride_tricks.as_strided(werte, (werte.size - 5 + 1, 5), werte.strides*2) In [5]: windows.max(axis=1) - windows.min(axis=1) Out[5]: array([0.71426446, 0.71426446, 0.80783698, 0.80783698, 0.7449869 , 0.7449869 , 0.7449869 , 0. , 0.1535455 , 0.28254629, 0.35209247, 0.53512758, 0.53512758, 0.53512758, 0.36881581, 0.43843173, 0.47240975, 0.47240975, 0.34931615, 0.37189768, 0.37189768, 0.37189768, 0.39833713, 0.56927844, 0.44090621, 0.5208942 ]) In [6]: np.where(windows.max(axis=1) - windows.min(axis=1) == 0) Out[6]: (array([7], dtype=int64),)
Danke