Реализовать скользящее окно с тремя входными переменными, списком, размером окна и размером перемещения вперед, используя python? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть такой список,

  l=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

Теперь я хочу применить скользящее окно размера пять (n1), но оно будет двигаться вперед на три шага (n2).

Нужный вывод, который я ищу, если n1 = 5 и n2 = 3,

[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11],[10,11,12,13,14],[13,14,15,16,17],[16,17,18,19,20]

Я мог бы использовать следующий код,

[ thelist[x:x+size] for x in range( len(thelist) - size + 1 ) ]  # but this returns only one 
forward move.

Как переместить его более чем на 1?

Я могу использовать цикл for, но время выполнения будет огромным.

Как реализовать это с меньшим временем выполнения?

1 Ответ

2 голосов
/ 01 ноября 2019

Попробуйте:

[thelist[x: x + 5] for x in range(0,len(thelist),3) if x + 5 <= len(thelist)]

Вывод:

[[1, 2, 3, 4, 5],
 [4, 5, 6, 7, 8],
 [7, 8, 9, 10, 11],
 [10, 11, 12, 13, 14],
 [13, 14, 15, 16, 17],
 [16, 17, 18, 19, 20]]
...