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