2016-04-24 23 views
5

正如標題所示,我開發了一個函數,在給定ORDERED升序列表的情況下,只保留距離爲至少有k個週期,但它在循環時動態更改迭代器時這樣做。我被告知這應該像瘟疫一樣避免,雖然我不完全相信爲什麼這是一個糟糕的主意,但我相信那些我一直在接受培訓的人,並因此要求提供如何避免這種做法。代碼如下:至少在列表中保留一定距離的元素 - 在循環時更改迭代器 - Python

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

由於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 
+0

我低頭。如此簡單和優雅。萬分感謝! – Asher11

相關問題