正如标题所暗示的那样,我开发了一个函数,给定一个ORDERED升序列表,你只保留距离至少为k个周期的元素,但它在循环时动态改变迭代器时这样做。我被告知这应该像瘟疫一样被避免,尽管我并不完全相信为什么这是一个如此糟糕的想法,但我相信那些我一直倾向于接受培训的人,因此就如何寻求建议避免这种做法。代码如下:
import pandas as pd
from datetime import days
a = pd.Series(range(0,25,1), index=pd.date_range('2011-1-1',periods=25))
store_before_cleanse = a.index
def funz(x,k):
i = 0
while i < len(x)-1:
if (x[i+1]-x[i]).days < k:
x = x[:i+1] + x[i+2:]
i = i-1
i = i + 1
return x
print(funz(store_before_cleanse,10))
您认为可以做些什么来避免它? p.s。:不要担心没有订购列表的解决方案。将给出的列表将始终以升序方式排序。
答案 0 :(得分:1)
你的函数的最大默认值是二次复杂度,因为x = x[:i+1] + x[i+2:]
每次复制整个x
。
最简单,更有效的方法就是
a.resample('10D').first().index
。
如果你喜欢循环,你可以这样做:
def funz1(dates,k):
result=[dates[0]]
for date in dates:
if (date-result[-1]).days >= k:
result.append(date)
return result