繁体   English   中英

返回列表中所有连续子序列的函数

[英]Function that returns all sub-sequences in a list that are successive

我有这个功能

def conseq_sequences(li, length):
    """ Takes a list and a length. Returns all sub-sequences in li that
    are successice (e.g. [1,2,3] or [5,6,7,8]) and of the right length.

    E.g.  >>> conseq_sequences([1,6,7,8,9,8,9], length=3)
          [[6,7,8], [7,8,9]]
    """
    return [li[n:n + length] for n in range(len(li) - length + 1)
            if li[n:n + length] == range(li[n], li[n] + length)]

该函数存在于一个类中,我无法理解它不起作用的方式。 当我调用它时,我得到一个空序列。

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

有人可以帮忙进行修改,以便返回列表中连续的所有子序列,例如在示例中?

在Python 3.x中, range不返回列表,而是一个range对象。

>>> range(1, 10)
range(1, 10)
>>> type(range(1, 10))
<class 'range'>
>>> [1, 2, 3] == range(1, 4)
False
>>> [1, 2, 3] == list(range(1, 4))
True

因此,您需要将其显式转换为列表,然后像这样进行比较

[li[n:n + length] for n in range(len(li) - length + 1)
    if li[n:n + length] == list(range(li[n], li[n] + length))]

在这里,我们通过将范围对象转换为列表来创建一个新列表,

list(range(li[n], li[n] + length))

演示

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def conseq_sequences(li, length):
...     """ Takes a list and a length. Returns all sub-sequences in li that
...     are successice (e.g. [1,2,3] or [5,6,7,8]) and of the right length.
... 
...     E.g.  >>> conseq_sequences([1,6,7,8,9,8,9], length=3)
...           [[6,7,8], [7,8,9]]
...     """
...     return [li[n:n + length] for n in range(len(li) - length + 1)
...             if li[n:n + length] == list(range(li[n], li[n] + length))]
... 
>>> conseq_sequences([1, 6, 7, 8, 9, 8, 9], 3)
[[6, 7, 8], [7, 8, 9]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM