将具有函数结构的python代码转换为具有生成器的类结构,并计算时间和空间复杂度

将具有函数结构的python代码转换为具有生成器的类结构,并计算时间和空间复杂度,python,generator,Python,Generator,我编写了这个简单的python代码,但现在我必须将其转换为一个类结构,该结构接受迭代器并充当生成器来生成元组(而不是返回它应该生成的元组)。我无法转换它: def func(str,size): size1 = size list1 = [] for i in str: list1.append(i) if len(list1) < size1: r

我编写了这个简单的python代码,但现在我必须将其转换为一个
结构,该结构接受迭代器并充当生成器来生成元组(而不是返回它应该生成的元组)。我无法转换它:

    def func(str,size):

        size1 = size
        list1 = []

        for i in str:
            list1.append(i)

            if len(list1) < size1:
                return (0)
                continue
            if len(list) > win_size1:
                list1.pop(0)      

            min = min(list1)

            return (min)

if __name__ == '__main__':

    str = [1,2,3,4,5,6]
    size = [4]
    res = sol2(str,size)
def func(str,size):
尺寸1=尺寸
列表1=[]
对于str中的i:
清单1.追加(i)
如果len(列表1)win_size1:
列表1.pop(0)
最小=最小(列表1)
返回(分钟)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
str=[1,2,3,4,5,6]
大小=[4]
res=sol2(str,大小)
我还必须得到时间和空间的复杂性。在我看来,时间复杂度看起来是O(n)(虽然我不是100%有信心),但我无法确定空间复杂度


如何将此代码转换为带有生成器的类,时间和空间复杂度是多少

当前,
return
语句后面的
continue
语句没有意义-
continue
将永远无法到达。但是,您可以使用
yield
而不是
return
生成每个元组,例如replace

return (None,None,None,None)

现在可以实际执行
continue
语句,并且您的算法可以返回多个元组

简单地将收益率转换为收益率会使函数成为生成器


我认为没有必要把它变成“类结构”。您可以创建一个类并将
sol2()
作为该类的一个方法,但不清楚您为什么要这样做。

只有window1和window2会要求额外的空间,所以我认为空间复杂度将是O(n)。

我的时间和空间复杂度是多少?@user2966197:您认为如何?当它有
return
语句时,它是O(1)。我不太确定你的算法想做什么,但对于
yield
语句,我觉得它是O(n)。如果你是这么想的话,它不是O(n^2)。你可以说它是2n,但就复杂性而言,它与n是一样的。那么O(n)对于这两个.WTF?你为什么要完全改变代码?这是一个与最初提出的算法完全不同的算法,它包含了新的bug。更改问题的代码将使目前为止给出的所有答案无效。@mhawke我必须随着要求的更改而进行更改。我道歉,然后问一个新问题。
yield (None,None,None,None)