在序列中找到所有长度为n的连续子序列

5 投票
4 回答
6976 浏览
提问于 2025-04-16 21:22

我想在一个序列中找到所有连续的长度为 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(...))

撰写回答