Generar rebanada que contiene elemento.
-
29-09-2020 - |
Pregunta
Supongamos que tengo la matriz:
[2, 3, 4, 5, 6, 7, 8, 9]
ahora basado en pocos parámetros:
-
current_item
- Artículo seleccionado actualmente. -
select_size
- tamaño de selección, siempre extraño. - current_item debe estar en medio de sublista si eso es posible.
- En caso de que no haya suficientes elementos en la izquierda / derecha de la lista, use los de derecha / izquierda.
Quiero obtener un sublista de la lista que sigue las condiciones:
Ejemplos:
list: [2, 3, 4, 5, 6, 7, 8, 9]
current_item: 5
select_size: 3
result: [4, 5, 6]
list: [2, 3, 4, 5, 6, 7, 8, 9]
current_item: 2
select_size: 5
result: [2, 3, 4, 5, 6]
list: [2, 3, 4, 5, 6, 7, 8, 9]
current_item: 8
select_size: 5
result: [5, 6, 7, 8, 9]
Solución
Deja que el índice del artículo central sea $ C $ y la longitud de la lista sea $ 2R + 1 $ . Suponemos que los índices de la lista son $ 0, \ ldots, n-1 $ .
Hay cuatro casos a considerar:
- si $ n> 2R + 1 $ , entonces los resultados son indefinidos (por su publicación).
- Si $ 0 \ leq cr $ y $ C + R \ leq n-1 $ , luego Usted acaba de tomar elementos $ CR, \ LDOTS, C + R $ .
- si $ CR <0 $ , entonces toma elementos $ 0, \ ldots, 2r $ .
- si $ C + r \ geq n $ , luego toma elementos $ n-2R-1, \ ldots , N-1 $ .
En los últimos dos casos, nos garantizamos que estamos dentro de los límites desde $ n> 2r + 1 $ .
Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange