【问题标题】:Sliding window that increases滑动窗口增加
【发布时间】:2014-07-09 20:27:19
【问题描述】:

我想获得一个不“滑动”但只是增加的滑动窗口,例如序列“ATCGATCGA”的宽度为 1 我想接收这些: (A)(A,T)(A,T,C)(A,T,C,G)(A,T,C,G,A)(A,T,C,G,A,T)(A ,T,C,G,A,T,C)(A,T,C,G,A,T,C,G)(A,T,C,G,A,T,C,G,A)

理想情况下,我希望它以 9 开​​始滑动,因此为什么在代码中我一直在处理它 n=1+8+i。我想通过枚举滑动它每次都会增加并因此增加,但会发生以下错误

尝试的代码:

def Slide_merge (seq):
    n=1+8+i
    it= iter(seq)
    for i, in enumerate(list(islice(it, n))):
        print it
        print n

错误信息:

<ipython-input-1-80c92e1a3f14> in Slide_merge(seq)
      1 import itertools
      2 def Slide_merge (seq):
----> 3     n=1+8+i
      4     it= iter(seq)
      5     for i, in enumerate(list(islice(it, n))):

UnboundLocalError: local variable 'i' referenced before assignment

【问题讨论】:

  • 您发布的代码与错误信息中显示的代码不同。
  • 我不认为最后一个代码 sn-p 与错误真正相关,但第一个 sn-p 确实是导致所描述错误的原因
  • @200 好的,那是因为我继续编辑它,现在也把它放回原来的位置,所以它们匹配。
  • @logc 我已经删除了最后一个代码,不确定是否相关或不那么认为不妨把它放进去。
  • @Tom Google 错误信息,它已经被问过百万次了。

标签: python python-2.7 sliding-window


【解决方案1】:

自己切片序列怎么样?

In [12]: def slide_merge(seq):
   ....:     for i in range(1, len(seq)):
   ....:         print seq[0:i]
   ....:

In [13]: slide_merge('ATCGATCGA')
A
AT
ATC
ATCG
ATCGA
ATCGAT
ATCGATC
ATCGATCG

【讨论】: