gpt4 book ai didi

Pythonic : Find all consecutive sub-sequences of certain length

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:26 25 4
gpt4 key购买 nike

我有一个整数列表,我想在这个列表中找到所有长度为 n 的连续子序列。例如:

>>> int_list = [1,4,6,7,8,9]
>>> conseq_sequences(int_list, length=3)
[[6,7,8], [7,8,9]]

我能想到的最好的是:

def conseq_sequences(self, li, length):
return [li[n:n+length]
for n in xrange(len(li)-length+1)
if li[n:n+length] == range(li[n], li[n]+length)]

这并不过分可读。是否有任何可读的 pythonic 方式来执行此操作?

最佳答案

这是一个更通用的解决方案,适用于任意输入可迭代对象(不仅仅是序列):

from itertools import groupby, islice, tee
from operator import itemgetter

def consecutive_subseq(iterable, length):
for _, consec_run in groupby(enumerate(iterable), lambda x: x[0] - x[1]):
k_wise = tee(map(itemgetter(1), consec_run), length)
for n, it in enumerate(k_wise):
next(islice(it, n, n), None) # consume n items from it
yield from zip(*k_wise)

例子:

print(*consecutive_subseq([1,4,6,7,8,9], 3))
# -> (6, 7, 8) (7, 8, 9)

代码使用 Python 3 语法,如果需要可以针对 Python 2 进行调整。

另请参阅,What is the most pythonic way to sort dates sequences?

关于Pythonic : Find all consecutive sub-sequences of certain length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23860898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com