我正在尝试在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'”

我真的很困惑。 。 。

最佳答案

您是说要这样做吗? :

a='abcdefg'
b = [a[i:i+3] for i in xrange(len(a)-2)]
print b
['abc', 'bcd', 'cde', 'def', 'efg']

10-08 09:42
查看更多