Найти все последовательные подпоследовательности длины n в последовательности

Я хочу найти все последовательные подпоследовательности длины n в последовательности.

Например, n было 3, и последовательность была:

[0,1,7,3,4,5,10] 

Я хочу функцию, которая будет выводиться как результат:

 [[0,1,7],[1,7,3],[7,3,4],[3,4,5],[4,5,10]] 

Заранее спасибо!

  • как распечатать выходные данные на странице html с помощью python?
  • Pandas DataFrame Наследование объектов или использование объекта?
  • Библиотека или инструмент для загрузки нескольких файлов параллельно
  • Идиоматический способ сделать список / dict в Cython?
  • Как получить разделитель переменных среды PATH в Python?
  • Как создать тестовый вывод html unit в Python?
  • Каков наиболее эффективный способ установки строк в нули для разреженной матрицы scipy?
  • Обтекание текста в таблице reportlab?
  • 4 Solutions collect form web for “Найти все последовательные подпоследовательности длины n в последовательности”

     >>> x = [0,1,7,3,4,5,10] >>> n = 3 >>> zip(*(x[i:] for i in range(n))) [(0, 1, 7), (1, 7, 3), (7, 3, 4), (3, 4, 5), (4, 5, 10)] 

    Если вы хотите, чтобы результат был списком списков вместо списка кортежей, используйте map(list, zip(...)) .

     >>> x = [0,1,7,3,4,5,10] >>> [x[n:n+3] for n in range(len(x)-2)] [[0, 1, 7], [1, 7, 3], [7, 3, 4], [3, 4, 5], [4, 5, 10]] 
     def subseqs(seq, length): for i in xrange(len(seq) - length + 1): yield seq[i:i+length] 

    Используйте его так:

     >>> for each in subseqs("hello", 3): ... print each ... hel ell llo высокоэнергетический >>> for each in subseqs("hello", 3): ... print each ... hel ell llo 

    Конечно, он работает также со списками:

     >>> list(subseqs([1, 2, 3, 4, 5, 6, 7, 8], 3)) [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8]] 

    Возможно, вам наверняка понравится следующее:

     def subseqs(xs, n): all_seqs = (xs[i:j+1] for i, _ in enumerate(xs) for j, _ in enumerate(xs)) return filter(lambda seq: len(seq) == n, all_seqs) >>> xs = [1, 2, 3, 4, 5, 6] # can be also range(1, 7) or list(range(1, 7)) >>> list(subseqs(xs, 3)) [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]] 

    Или просто, для получения всех последовательностей списка с именем «xs»:

     [xs[i:j+1] for i, _ in enumerate(xs) for j, _ in enumerate(xs)] 

    Для получения последовательностей списка с именем «xs», которые имеют только длину n:

     [xs[i:j+1] for i, _ in enumerate(xs) for j, _ in enumerate(xs) if len(xs[i:j+1]) == n] 
    Python - лучший язык программирования в мире.