在序列中找到所有长度为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]]
提前谢谢你!
4 个回答
2
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
当然,它也可以用于列表:
>>> 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]]
14
在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个函数时,发现它的表现和预期不一样,这时候就需要仔细检查代码,看看是不是哪里出错了。
另外,编程的过程中,常常需要参考一些文档或者社区的讨论,这样可以帮助我们更好地理解某个工具或语言的用法。StackOverflow就是一个很好的地方,大家可以在这里提问和回答问题,分享自己的经验。
总之,遇到问题时,不要着急,慢慢分析,查找资料,通常都能找到解决办法。
>>> 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]]
19
>>> 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(...))
。