[英]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.