¿Coinciden dos columnas/listas booleanas? Comparación de dos columnas de tamaños diferentes: ¿Coincide una parte de una lista con una parte de la otra? (python)
Tengo diferentes listas de valores booleanos de diferentes longitudes a las que llamaré blists
, que quiero comparar con una lista booleana fija a lo largo del tiempo, a la que llamaré blist
.
El objetivo es encontrar la serie de coincidencia más larga en una lista (de blists
) en blist
.
Quiero ver si se puede encontrar una parte o incluso toda una lista de blists
en alguna parte de la lista de blist
. Establecería un mínimo de valores coincidentes para asegurarme de que no se llene demasiado mi salida.
Por ejemplo (True = T, False = F, ejemplo más corto que en la vida real):
Lista 1 de blists: (T,T,T,F,T,T,F,F,F,T)
blist: (F,F,T,T,F,F,F,F)
Quiero ver si alguna parte de la lista 1 (F,T,T,F,F,F)
es igual a alguna parte de la lista blist
.
Por lo tanto, para un ejemplo de blist
de (F,F,T,T,F,F,F,F)
, la salida debería ser que se puede encontrar una parte de la lista 1 en blist
.
Entonces, la salida para el ejemplo sería:
blist
tiene similitud con la lista 1 (punto de inicio en la lista 1: 3, punto de inicio en blist
: 1, longitud: 6, parte de la lista que coincide: (F,T,T,F,F,F)
).
He intentado con .corr()
, bucles for
y condiciones if
, y nada funcionó correctamente.
Este problema probablemente tenga una solución sencilla, pero no puedo resolverlo.
davy.ai
Para resolver este problema, podemos iterar a través de cada
blists
y compararlo conblist
utilizando un enfoque de ventana deslizante. En cada comparación, calculamos la longitud de la serie de coincidencias más larga y almacenamos el punto de inicio tanto enblist
como enblists
. Si la longitud es mayor o igual a un valor mínimo de coincidencia, agregamos el resultado a nuestra lista de salida.Aquí hay un código de ejemplo que implementa este enfoque:
Así es como puedes usar esta función con tu ejemplo:
Esto producirá la siguiente salida:
Esto significa que se encontró una coincidencia de longitud 6 comenzando en el índice 3 en
blists[0]
y coincidiendo con[False, True, True, False, False, False]
enblist
.