至少将列表中的元素保留在一定距离 - 在循环时更改迭代器 - Python

时间:2016-04-24 13:06:05

标签: python iterator

正如标题所暗示的那样,我开发了一个函数,给定一个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。:不要担心没有订购列表的解决方案。将给出的列表将始终以升序方式排序。

1 个答案:

答案 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