シーケンス内の長さ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]]
ありがとう!
シーケンス内の長さ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]]
ありがとう!
>>> 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]]
これは、任意の部分配列サイズに対して一般的なものにするために、 ''範囲内のi(len(x)-n + 1)] '' [x [i:i + n]] '' nは部分配列の望ましい長さです。 –
def subseqs(seq, length):
for i in xrange(len(seq) - length + 1):
yield seq[i:i+length]
それを使用してIKEこの:あなたのため
>>> 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]]
次おそらくかもしれないスーツ:それはリストでも動作しますもちろん
>>> for each in subseqs("hello", 3):
... print each
...
hel
ell
llo
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]]
または、単純に、リストのすべてのシーケンスを取得するためには、長さnからだけでは 'XS' という名前のリストのシーケンスを取得するための
[xs[i:j+1] for i, _ in enumerate(xs) for j, _ in enumerate(xs)]
: 'XS' をmedが
[xs[i:j+1] for i, _ in enumerate(xs) for j, _ in enumerate(xs) if len(xs[i:j+1]) == n]
あなたは何を試してみましたか?実際にはかなり簡単だと思われます。各位置でサイズnの部分列を反復して取ります。 –