【发布时间】:2012-01-14 12:56:45
【问题描述】:
我正在尝试在 Python 中生成滑动窗口函数。我想出了如何做到这一点,但不是全部在函数内部。 itertools、yield 和 iter() 对我来说是全新的。
我要输入
a='abcdefg'
b=window(a,3)
print b
['abc','bcd','cde','def','efg']
我的工作方式是
def window(fseq, window_size=5):
import itertools
tentative=[]
final=[]
iteration=iter(fseq)
value=tuple(itertools.islice(iteration,window_size))
if len(value) == window_size:
yield value
for element in iteration:
value = value[1:] + (element,)
yield value
a='abcdefg'
result=window(a)
list1=[]
for k in result:
list1.append(k)
list2=[]
for j in list1:
tentative=''.join(j)
list2.append(tentative)
print list2
基本上让我困惑的是如何在函数内部使用函数的最终值?
这是我的函数代码
def window(fseq, window_size=5):
import itertools
tentative=[]
final=[]
iteration=iter(fseq)
value=tuple(itertools.islice(iteration,window_size))
if len(value) == window_size:
yield value
for element in iteration:
value = value[1:] + (element,)
yield value
for k in value:
tentative.append(k)
for j in tentative:
tentative_string=''.join(j)
final.append(tentative_string)
return final
seq='abcdefg'
uence=window(seq)
print uence
我希望它返回加入的列表,但是当我按下运行它时,它说“你的程序中有一个错误 * 'return' with argument inside generator”
我真的很困惑。 . .
【问题讨论】:
-
老兄...你打算每 8 小时发布一次相同的问题吗? :o
-
我的错我以为我可以删除另一个
-
它仍然是错误的:如果你问一个问题并且你没有得到答案,机会是:(1)你的表述很糟糕[→编辑它]-(2)这是一个困难的问题[ → 回答自己一些问题,获得声望点数并悬赏]。在 SO 上转发以获得关注并不是一个受欢迎的行为(尽管我很肯定你这样做并不是为了造成任何伤害!):)
标签: python string loops sliding-window