我想查找序列中長度爲n的所有連續子序列。查找序列中長度爲n的所有連續子序列
E.g.說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的所有連續子序列
E.g.說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]
>>> [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]]
爲了使任何子序列的大小爲一般:'[x [i:i + n]爲範圍內的我(len(x)-n + 1)]'其中'n'是子序列的期望長度。 –
def subseqs(seq, length):
for i in xrange(len(seq) - length + 1):
yield seq[i:i+length]
使用它IKE在此:
>>> 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]]
或者乾脆,爲了獲得列表na的所有序列MED '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]
你嘗試過什麼?實際上似乎很直接。在每個位置迭代並採取大小爲n的子序列。 –