将具有函数结构的python代码转换为具有生成器的类结构,并计算时间和空间复杂度
我编写了这个简单的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
类
结构,该结构接受迭代器并充当生成器来生成元组(而不是返回它应该生成的元组)。我无法转换它:
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)